]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/flexible-array-test.cpp
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / SemaCXX / flexible-array-test.cpp
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>
12 void QMap<Key, T>::insert(const Key &, const T &avalue)
13 {
14   v = avalue;
15 }
16
17
18 struct 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
28 void 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
38 struct S {
39         virtual void foo();
40 };
41
42 struct X {
43    int blah;
44    S strings[]; // expected-error {{flexible array member 'strings' of non-POD element type 'S []'}}
45 };
46
47 class A {
48   int s;
49   char c[];
50 };
51
52 union B {
53   int s;
54   char c[];
55 };
56
57 namespace rdar9065507 {
58
59 struct StorageBase {
60   long ref_count;
61   unsigned size;
62   unsigned capacity;
63 };
64
65 struct Storage : StorageBase {
66   int data[];
67 };
68
69 struct VirtStorage : virtual StorageBase {
70   int data[]; // expected-error {{flexible array member 'data' not allowed in struct which has a virtual base class}}
71 };
72
73 }