Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -4862,7 +4862,8 @@ if (!VLATy) return QualType(); // FIXME: We should probably handle this case - if (VLATy->getElementType()->isVariablyModifiedType()) + if (VLATy->getElementType()->isVariablyModifiedType() || + VLATy->getElementType()->isIncompleteType()) return QualType(); llvm::APSInt Res; Index: test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp =================================================================== --- test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp +++ test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp @@ -42,6 +42,9 @@ using U = int[42]; // ok using U = int; // expected-error {{type alias redefinition with different types ('int' vs 'int [42]')}} + using V = struct A[ // expected-error {{variable length array declaration not allowed at file scope}} + (1 << 30) << 2]; // expected-warning {{requires 34 bits to represent}} + void f() { int n = 42; goto foo; // expected-error {{cannot jump}}