It's OK for classes to have flexible array elements (but not unions).

llvm-svn: 113018
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 3551518..f5e045a 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -6564,7 +6564,7 @@
       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/clang/test/SemaCXX/flexible-array-test.cpp b/clang/test/SemaCXX/flexible-array-test.cpp
index 02e3f83..95d8bb1 100644
--- a/clang/test/SemaCXX/flexible-array-test.cpp
+++ b/clang/test/SemaCXX/flexible-array-test.cpp
@@ -43,3 +43,13 @@
    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 []'}}
+};