diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -16479,7 +16479,7 @@ // If we receive a broken type, recover by assuming 'int' and // marking this declaration as invalid. - if (T.isNull()) { + if (T.isNull() || T->containsErrors()) { InvalidDecl = true; T = Context.IntTy; } diff --git a/clang/test/Sema/invalid-member.cpp b/clang/test/Sema/invalid-member.cpp --- a/clang/test/Sema/invalid-member.cpp +++ b/clang/test/Sema/invalid-member.cpp @@ -13,3 +13,9 @@ }; // Should be able to evaluate sizeof without crashing. static_assert(sizeof(Y) == 1, "No valid members"); + +class Z { + int array[sizeof(invalid())]; // expected-error {{use of undeclared identifier}} +}; +// Should be able to evaluate sizeof without crashing. +static_assert(sizeof(Z) == 1, "No valid members");