99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic -std=c99
 | |
| 
 | |
| int __attribute__(()) x;
 | |
| 
 | |
| __inline void __attribute__((__always_inline__, __nodebug__))
 | |
| foo(void) {
 | |
| }
 | |
| 
 | |
| 
 | |
| __attribute__(()) y;   // expected-warning {{defaults to 'int'}}
 | |
| 
 | |
| // PR2796
 | |
| int (__attribute__(()) *z)(long y);
 | |
| 
 | |
| 
 | |
| void f1(__attribute__(()) int x);
 | |
| 
 | |
| int f2(y, __attribute__(()) x);     // expected-error {{expected identifier}}
 | |
| 
 | |
| // This is parsed as a normal argument list (with two args that are implicit
 | |
| // int) because the __attribute__ is a declspec.
 | |
| void f3(__attribute__(()) x,  // expected-warning {{defaults to 'int'}}
 | |
|         y);               // expected-warning {{defaults to 'int'}}
 | |
| 
 | |
| void f4(__attribute__(()));   // expected-error {{expected parameter declarator}}
 | |
| 
 | |
| 
 | |
| // This is ok, the __attribute__ applies to the pointer.
 | |
| int baz(int (__attribute__(()) *x)(long y));
 | |
| 
 | |
| void g1(void (*f1)(__attribute__(()) int x));
 | |
| void g2(int (*f2)(y, __attribute__(()) x));    // expected-error {{expected identifier}}
 | |
| void g3(void (*f3)(__attribute__(()) x, int y));  // expected-warning {{defaults to 'int'}}
 | |
| void g4(void (*f4)(__attribute__(())));  // expected-error {{expected parameter declarator}}
 | |
| 
 | |
| 
 | |
| void (*h1)(void (*f1)(__attribute__(()) int x));
 | |
| void (*h2)(int (*f2)(y, __attribute__(()) x));    // expected-error {{expected identifier}}
 | |
| 
 | |
| void (*h3)(void (*f3)(__attribute__(()) x));   // expected-warning {{defaults to 'int'}}
 | |
| void (*h4)(void (*f4)(__attribute__(())));  // expected-error {{expected parameter declarator}}
 | |
| 
 | |
| 
 | |
| 
 | |
| // rdar://6131260
 | |
| int foo42(void) {
 | |
|   int x, __attribute__((unused)) y, z;
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| // rdar://6096491
 | |
| void __attribute__((noreturn)) d0(void), __attribute__((noreturn)) d1(void);
 | |
| 
 | |
| void d2(void) __attribute__((noreturn)), d3(void) __attribute__((noreturn));
 | |
| 
 | |
| 
 | |
| // PR6287
 | |
| void __attribute__((returns_twice)) returns_twice_test();
 | |
| 
 | |
| int aligned(int);
 | |
| int __attribute__((vec_type_hint(char, aligned(16) )) missing_rparen_1; // expected-error {{expected ')'}}
 | |
| int __attribute__((mode(x aligned(16) )) missing_rparen_2; // expected-error {{expected ')'}}
 | |
| int __attribute__((format(printf, 0 aligned(16) )) missing_rparen_3; // expected-error {{expected ')'}}
 | |
| 
 | |
| 
 | |
| 
 | |
| int testFundef1(int *a) __attribute__((nonnull(1))) { // \
 | |
|     // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
 | |
|   return *a;
 | |
| }
 | |
| 
 | |
| // noreturn is lifted to type qualifier
 | |
| void testFundef2() __attribute__((noreturn)) { // \
 | |
|     // expected-warning {{GCC does not allow noreturn attribute in this position on a function definition}}
 | |
|   testFundef2();
 | |
| }
 | |
| 
 | |
| int testFundef3(int *a) __attribute__((nonnull(1), // \
 | |
|     // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
 | |
|                                      pure)) { // \
 | |
|     // expected-warning {{GCC does not allow pure attribute in this position on a function definition}}
 | |
|   return *a;
 | |
| }
 | |
| 
 | |
| int testFundef4(int *a) __attribute__((nonnull(1))) // \
 | |
|     // expected-warning {{GCC does not allow nonnull attribute in this position on a function definition}}
 | |
|                       __attribute((pure)) { // \
 | |
|     // expected-warning {{GCC does not allow pure attribute in this position on a function definition}}
 | |
|   return *a;
 | |
| }
 | |
| 
 | |
| // GCC allows these
 | |
| void testFundef5() __attribute__(()) { }
 | |
| 
 | |
| __attribute__((pure)) int testFundef6(int a) { return a; }
 | |
| 
 | |
| 
 | |
| 
 |