diff options
author | Anders Carlsson <andersca@mac.com> | 2010-09-03 21:53:49 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-09-03 21:53:49 +0000 |
commit | e63438b34b075a65849b9dee022adffc7c222ae5 (patch) | |
tree | e813677ccd874e89d7b730a4bd6692515f22ea5a | |
parent | 7925561e702430c0d632c5e5db1a74673b44ea18 (diff) |
It's OK for classes to have flexible array elements (but not unions).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113018 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/flexible-array-test.cpp | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 3551518316..f5e045a722 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -6564,7 +6564,7 @@ void Sema::ActOnFields(Scope* S, EnclosingDecl->setInvalidDecl(); continue; } else if (FDTy->isIncompleteArrayType() && i == NumFields - 1 && - Record && Record->isStruct()) { + Record && !Record->isUnion()) { // Flexible array member. if (NumNamedMembers < 1) { Diag(FD->getLocation(), diag::err_flexible_array_empty_struct) diff --git a/test/SemaCXX/flexible-array-test.cpp b/test/SemaCXX/flexible-array-test.cpp index 02e3f83974..95d8bb1aa4 100644 --- a/test/SemaCXX/flexible-array-test.cpp +++ b/test/SemaCXX/flexible-array-test.cpp @@ -43,3 +43,13 @@ struct X { int blah; S strings[]; // expected-error {{flexible array member 'strings' of non-POD element type 'S []'}} }; + +class A { + int s; + char c[]; +}; + +union B { + int s; + char c[]; // expected-error {{field has incomplete type 'char []'}} +}; |