[CodeGenPrepare] Drop nsw flags in `optimizeLoadExt` (#118180)
[llvm-project.git] / clang / test / SemaCXX / flexible-array-test.cpp
blob19f130288b6100c1e56c83ae750839e6e0314885
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // pr7029
4 template <class Key, class T> struct QMap
6 void insert(const Key &, const T &);
7 T v;
8 };
11 template <class Key, class T>
12 void QMap<Key, T>::insert(const Key &, const T &avalue)
14 v = avalue;
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[];
21 int x;
22 } rec;
24 struct inotify_event
26 int wd;
28 // clang doesn't like '[]':
29 // cannot initialize a parameter of type 'void *' with an rvalue of type 'char (*)[]'
30 char name [];
34 void foo()
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);
44 struct S {
45 virtual void foo();
48 struct X {
49 int blah;
50 S strings[];
53 S a, b = a;
54 S f(X &x) {
55 a = b;
56 return x.strings[0];
59 class A {
60 int s;
61 char c[];
64 union B {
65 int s;
66 char c[];
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}}
74 namespace rdar9065507 {
76 struct StorageBase {
77 long ref_count;
78 unsigned size;
79 unsigned capacity;
82 struct Storage : StorageBase {
83 int data[];
86 struct VirtStorage : virtual StorageBase {
87 int data[]; // expected-error {{flexible array member 'data' not allowed in struct which has a virtual base class}}
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}}
97 ~FlexNonTrivDtor() {
98 for (int i = n; i != 0; --i)
99 ntd[i-1].~NonTrivDtor();