brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · ea4b66c Raw
120 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s2struct X {3  union {4    float f3;5    double d2;6  } named;7 8  union {9    int i;10    float f;11    12    union {13      float f2;14      double d;15    };16  };17 18  struct {19    int a;20    float b;21  };22};23 24void test_unqual_references(struct X x, const struct X xc) {25  // expected-note@-1 3{{variable 'xc' declared const here}}26  x.i = 0;27  x.f = 0.0;28  x.f2 = x.f;29  x.d = x.f;30  x.f3 = 0; // expected-error{{no member named 'f3'}}31  x.a = 0;32 33  xc.d = 0.0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}34  xc.f = 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}35  xc.a = 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}36}37 38 39struct Redecl {40  int x; // expected-note{{previous declaration is here}}41  struct y { }; // expected-warning{{declaration does not declare anything}}42 43  union {44    int x; // expected-error{{member of anonymous union redeclares 'x'}}45    float y;46    double z; // expected-note{{previous declaration is here}}47    double zz; // expected-note{{previous declaration is here}}48  };49 50  int z; // expected-error{{duplicate member 'z'}}51  void zz(void); // expected-error{{duplicate member 'zz'}} 52};53 54union { // expected-warning{{declaration does not declare anything}}55  int int_val;56  float float_val;57};58 59static union { // expected-warning{{declaration does not declare anything}}60  int int_val2;61  float float_val2;62};63 64void f(void) {65  int_val2 = 0; // expected-error{{use of undeclared identifier}}66  float_val2 = 0.0; // expected-error{{use of undeclared identifier}}67}68 69void g(void) {70  union { // expected-warning{{declaration does not declare anything}}71    int i;72    float f2;73  };74  i = 0; // expected-error{{use of undeclared identifier}}75  f2 = 0.0; // expected-error{{use of undeclared identifier}}76}77 78struct s0 { union { int f0; }; };79 80typedef struct { }; // expected-warning{{typedef requires a name}}81 82// PR367583struct s1 {84  int f0; // expected-note{{previous declaration is here}}85  union {86    int f0; // expected-error{{member of anonymous union redeclares 'f0'}}87  };88};89 90// PR368091struct {}; // expected-warning{{declaration does not declare anything}}92 93struct s2 {94  union {95    int a;96  } // expected-warning{{expected ';' at end of declaration list}}97}; // expected-error{{expected member name or ';' after declaration specifiers}}98 99// Make sure we don't a.k.a. anonymous structs.100typedef struct {101  int x;102} a_struct;103int tmp = (a_struct) { .x = 0 }; // expected-error {{initializing 'int' with an expression of incompatible type 'a_struct'}}104 105// This example comes out of the C11 standard; make sure we don't accidentally reject it.106struct s {107  struct { int i; };108  int a[];109};110 111// PR20930112struct s3 {113  struct { int A __attribute__((deprecated)); }; // expected-note {{'A' has been explicitly marked deprecated here}}114};115 116void deprecated_anonymous_struct_member(void) {117  struct s3 s;118  s.A = 1; // expected-warning {{'A' is deprecated}}119}120