1// RUN: %clang_cc1 -fsyntax-only -verify %s
2// pr7029
3
4template <class Key, class T> struct QMap
5{
6  void insert(const Key &, const T &);
7  T v;
8};
9
10
11template <class Key, class T>
12void QMap<Key, T>::insert(const Key &, const T &avalue)
13{
14  v = avalue;
15}
16
17
18struct inotify_event
19{
20  int wd;
21
22  // clang doesn't like '[]':
23  // cannot initialize a parameter of type 'void *' with an rvalue of type 'char (*)[]'
24  char name [];
25};
26
27
28void foo()
29{
30    inotify_event event;
31    inotify_event* ptr = &event;
32    inotify_event event1 = *ptr;
33    *ptr = event;
34    QMap<int, inotify_event> eventForId;
35    eventForId.insert(ptr->wd, *ptr);
36}
37
38struct S {
39	virtual void foo();
40};
41
42struct X {
43   int blah;
44   S strings[];	// expected-error {{flexible array member 'strings' of non-POD element type 'S []'}}
45};
46
47class A {
48  int s;
49  char c[];
50};
51
52union B {
53  int s;
54  char c[];
55};
56
57namespace rdar9065507 {
58
59struct StorageBase {
60  long ref_count;
61  unsigned size;
62  unsigned capacity;
63};
64
65struct Storage : StorageBase {
66  int data[];
67};
68
69}
70