1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // pr7029 3 4 template <class Key, class T> struct QMap 5 { 6 void insert(const Key &, const T &); 7 T v; 8 }; 9 10 11 template <class Key, class T> insert(const Key &,const T & avalue)12void QMap<Key, T>::insert(const Key &, const T &avalue) 13 { 14 v = avalue; 15 } 16 17 struct Rec { 18 union { // expected-warning-re {{variable sized type '{{.*}}' not at the end of a struct or class is a GNU extension}} 19 int u0[]; 20 }; 21 int x; 22 } rec; 23 24 struct inotify_event 25 { 26 int wd; 27 28 // clang doesn't like '[]': 29 // cannot initialize a parameter of type 'void *' with an rvalue of type 'char (*)[]' 30 char name []; 31 }; 32 33 foo()34void foo() 35 { 36 inotify_event event; 37 inotify_event* ptr = &event; 38 inotify_event event1 = *ptr; 39 *ptr = event; 40 QMap<int, inotify_event> eventForId; 41 eventForId.insert(ptr->wd, *ptr); 42 } 43 44 struct S { 45 virtual void foo(); 46 }; 47 48 struct X { 49 int blah; 50 S strings[]; 51 }; 52 53 S a, b = a; f(X & x)54S f(X &x) { 55 a = b; 56 return x.strings[0]; 57 } 58 59 class A { 60 int s; 61 char c[]; 62 }; 63 64 union B { 65 int s; 66 char c[]; 67 }; 68 69 class C { 70 char c[]; // expected-error {{flexible array member 'c' with type 'char []' is not at the end of class}} 71 int s; // expected-note {{next field declaration is here}} 72 }; 73 74 namespace rdar9065507 { 75 76 struct StorageBase { 77 long ref_count; 78 unsigned size; 79 unsigned capacity; 80 }; 81 82 struct Storage : StorageBase { 83 int data[]; 84 }; 85 86 struct VirtStorage : virtual StorageBase { 87 int data[]; // expected-error {{flexible array member 'data' not allowed in struct which has a virtual base class}} 88 }; 89 90 } 91 92 struct NonTrivDtor { ~NonTrivDtor(); }; 93 // FIXME: It's not clear whether we should disallow examples like this. GCC accepts. 94 struct FlexNonTrivDtor { 95 int n; 96 NonTrivDtor ntd[]; // expected-error {{flexible array member 'ntd' of type 'NonTrivDtor []' with non-trivial destruction}} ~FlexNonTrivDtorFlexNonTrivDtor97 ~FlexNonTrivDtor() { 98 for (int i = n; i != 0; --i) 99 ntd[i-1].~NonTrivDtor(); 100 } 101 }; 102