14142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian// RUN: %clang_cc1 -fsyntax-only -verify %s
24142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian// pr7029
34142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
44142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahaniantemplate <class Key, class T> struct QMap
54142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian{
64142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  void insert(const Key &, const T &);
74142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  T v;
84142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian};
94142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
104142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
114142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahaniantemplate <class Key, class T>
124142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanianvoid QMap<Key, T>::insert(const Key &, const T &avalue)
134142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian{
144142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  v = avalue;
154142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian}
164142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
174142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
184142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanianstruct inotify_event
194142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian{
204142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  int wd;
214142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
224142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  // clang doesn't like '[]':
234142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  // cannot initialize a parameter of type 'void *' with an rvalue of type 'char (*)[]'
244142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian  char name [];
254142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian};
264142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
274142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
284142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanianvoid foo()
294142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian{
304142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    inotify_event event;
314142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    inotify_event* ptr = &event;
324142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    inotify_event event1 = *ptr;
334142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    *ptr = event;
344142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    QMap<int, inotify_event> eventForId;
354142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian    eventForId.insert(ptr->wd, *ptr);
364142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian}
374142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
384142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanianstruct S {
394142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian	virtual void foo();
404142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian};
414142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian
424142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanianstruct X {
434142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian   int blah;
442c0a54031c98721460806e78e0e10da093d3fd72Fariborz Jahanian   S strings[];	// expected-error {{flexible array member 'strings' of non-POD element type 'S []'}}
454142cebf70fe6c3855570c98b8042431797a65fdFariborz Jahanian};
46e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson
47e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlssonclass A {
48e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson  int s;
49e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson  char c[];
50e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson};
51e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson
52e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlssonunion B {
53e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson  int s;
54d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis  char c[];
55d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis};
56d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis
57d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidisnamespace rdar9065507 {
58d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis
59d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidisstruct StorageBase {
60d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis  long ref_count;
61d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis  unsigned size;
62d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis  unsigned capacity;
63e63438b34b075a65849b9dee022adffc7c222ae5Anders Carlsson};
64d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis
65d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidisstruct Storage : StorageBase {
66d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis  int data[];
67d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis};
68d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis
69d97cec3deb6e34f0f9d4f5f8ec11b28e44812727Argyrios Kyrtzidis}
70