// RUN: clang-cc -fblocks -fsyntax-only -verify %s

void (^e) (int arg, const char * format, ...) __attribute__ ((__sentinel__ (1,1)));

int main()
{
        void (^bbad) (int arg, const char * format) __attribute__ ((__sentinel__)) ; // expected-warning {{sentinel' attribute only supported for variadic blocks}}
        void (^b) (int arg, const char * format, ...) __attribute__ ((__sentinel__)) =  // expected-note {{block has been explicitly marked sentinel here}}
						^ __attribute__ ((__sentinel__)) (int arg, const char * format, ...) {};
        void (^z) (int arg, const char * format, ...) __attribute__ ((__sentinel__ (2))) = ^ __attribute__ ((__sentinel__ (2))) (int arg, const char * format, ...) {}; // expected-note {{block has been explicitly marked sentinel here}}


        void (^y) (int arg, const char * format, ...) __attribute__ ((__sentinel__ (5))) = ^ __attribute__ ((__sentinel__ (5))) (int arg, const char * format, ...) {}; // expected-note {{block has been explicitly marked sentinel here}}

	b(1, "%s", (void*)0);	// OK
	b(1, "%s", 0);  // expected-warning {{missing sentinel in block call}}
	z(1, "%s",4 ,1,0);  // expected-warning {{missing sentinel in block call}}
	z(1, "%s", (void*)0, 1, 0);	// OK

	y(1, "%s", 1,2,3,4,5,6,7);  // expected-warning {{missing sentinel in block call}}

	y(1, "%s", (void*)0,3,4,5,6,7);	// OK

}

