Home | History | Annotate | Download | only in Sema
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 // rdar: // 8125274
      4 static int a16[];  // expected-warning {{tentative array definition assumed to have one element}}
      5 
      6 void f16(void) {
      7     extern int a16[];
      8 }
      9 
     10 
     11 // PR10013: Scope of extern declarations extend past enclosing block
     12 extern int PR10013_x;
     13 int PR10013(void) {
     14   int *PR10013_x = 0;
     15   {
     16     extern int PR10013_x;
     17     extern int PR10013_x;
     18   }
     19 
     20   return PR10013_x; // expected-warning{{incompatible pointer to integer conversion}}
     21 }
     22 
     23 static int test1_a[]; // expected-warning {{tentative array definition assumed to have one element}}
     24 extern int test1_a[];
     25 
     26 // rdar://13535367
     27 void test2declarer() { extern int test2_array[100]; }
     28 extern int test2_array[];
     29 int test2v = sizeof(test2_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}}
     30 
     31 void test3declarer() {
     32   { extern int test3_array[100]; }
     33   extern int test3_array[];
     34   int x = sizeof(test3_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}}
     35 }
     36 
     37 void test4() {
     38   extern int test4_array[];
     39   {
     40     extern int test4_array[100];
     41     int x = sizeof(test4_array); // fine
     42   }
     43   int x = sizeof(test4_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}}
     44 }
     45 
     46 // Test that invalid local extern declarations of library
     47 // builtins behave reasonably.
     48 extern void abort(void); // expected-note 2 {{previous declaration is here}}
     49 extern float *calloc(); // expected-warning {{incompatible redeclaration of library function}} expected-note {{is a builtin}} expected-note 2 {{previous declaration is here}}
     50 void test5a() {
     51   int abort(); // expected-error {{conflicting types}}
     52   float *malloc(); // expected-warning {{incompatible redeclaration of library function}} expected-note 2 {{is a builtin}}
     53   int *calloc(); // expected-error {{conflicting types}}
     54 }
     55 void test5b() {
     56   int abort(); // expected-error {{conflicting types}}
     57   float *malloc(); // expected-warning {{incompatible redeclaration of library function}}
     58   int *calloc(); // expected-error {{conflicting types}}
     59 }
     60 void test5c() {
     61   void (*_abort)(void) = &abort;
     62   void *(*_malloc)() = &malloc;
     63   float *(*_calloc)() = &calloc;
     64 }
     65