Home | History | Annotate | Download | only in Sema
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 // PR3459
      3 struct bar {
      4   char n[1];
      5 };
      6 
      7 struct foo {
      8   char name[(int)&((struct bar *)0)->n];
      9   char name2[(int)&((struct bar *)0)->n - 1]; //expected-error{{'name2' declared as an array with a negative size}}
     10 };
     11 
     12 // PR3430
     13 struct s {
     14   struct st {
     15     int v;
     16   } *ts;
     17 };
     18 
     19 struct st;
     20 
     21 int foo() {
     22   struct st *f;
     23   return f->v + f[0].v;
     24 }
     25 
     26 // PR3642, PR3671
     27 struct pppoe_tag {
     28  short tag_type;
     29  char tag_data[];
     30 };
     31 struct datatag {
     32   struct pppoe_tag hdr; //expected-warning{{field 'hdr' with variable sized type 'struct pppoe_tag' not at the end of a struct or class is a GNU extension}}
     33   char data;
     34 };
     35 
     36 
     37 // PR4092
     38 struct s0 {
     39   char a;  // expected-note {{previous declaration is here}}
     40   char a;  // expected-error {{duplicate member 'a'}}
     41 };
     42 
     43 struct s0 f0(void) {}
     44 
     45 // <rdar://problem/8177927> - This previously triggered an assertion failure.
     46 struct x0 {
     47   unsigned int x1;
     48 };
     49 
     50 // rdar://problem/9150338
     51 static struct test1 { // expected-warning {{'static' ignored on this declaration}}
     52   int x;
     53 };
     54 const struct test2 { // expected-warning {{'const' ignored on this declaration}}
     55   int x;
     56 };
     57 inline struct test3 { // expected-error {{'inline' can only appear on functions}}
     58   int x;
     59 };
     60 
     61 struct hiding_1 {};
     62 struct hiding_2 {};
     63 void test_hiding() {
     64   struct hiding_1 *hiding_1();
     65   extern struct hiding_2 *hiding_2;
     66   struct hiding_1 *p = hiding_1();
     67   struct hiding_2 *q = hiding_2;
     68 }
     69 
     70 struct PreserveAttributes {};
     71 typedef struct __attribute__((noreturn)) PreserveAttributes PreserveAttributes_t; // expected-warning {{'noreturn' attribute only applies to functions and methods}}
     72