2009-12-16 04:14:24 +08:00
// RUN: %clang_cc1 -fblocks -fsyntax-only -verify %s
2009-05-16 04:33:25 +08:00
void ( ^ e ) ( int arg , const char * format , . . . ) __attribute__ ( ( __sentinel__ ( 1 , 1 ) ) ) ;
2009-09-09 23:08:12 +08:00
int main ( ) {
2012-01-06 09:23:10 +08:00
void ( ^ bbad ) ( int arg , const char * format ) __attribute__ ( ( __sentinel__ ) ) ; // expected-warning {{'sentinel' attribute only supported for variadic blocks}}
bbad = ^ void ( int arg , const char * format ) __attribute__ ( ( __sentinel__ ) ) { } ; // expected-warning {{'sentinel' attribute only supported for variadic blocks}}
2009-09-09 23:08:12 +08:00
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}}
2009-05-16 04:33:25 +08:00
2009-09-09 23:08:12 +08:00
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}}
2009-05-16 04:33:25 +08:00
2009-09-09 23:08:12 +08:00
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
2009-05-16 04:33:25 +08:00
2009-09-09 23:08:12 +08:00
y ( 1 , " %s " , 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ; // expected-warning {{missing sentinel in block call}}
2009-05-16 04:33:25 +08:00
2009-09-09 23:08:12 +08:00
y ( 1 , " %s " , ( void * ) 0 , 3 , 4 , 5 , 6 , 7 ) ; // OK
2009-05-16 04:33:25 +08:00
}