Author: Akira Hatanaka Date: 2023-10-02T12:46:00-07:00 New Revision: 1925c7aa373e6e36a955888f98037253acf6097e
URL: https://github.com/llvm/llvm-project/commit/1925c7aa373e6e36a955888f98037253acf6097e DIFF: https://github.com/llvm/llvm-project/commit/1925c7aa373e6e36a955888f98037253acf6097e.diff LOG: Mark an ObjCIvarDecl as invalid if its type contains errors (#68001) This fixes an assertion failure in InitializationSequence::Perform. Added: Modified: clang/lib/Sema/SemaDecl.cpp clang/test/SemaObjCXX/ivar-struct.mm Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 0a301e59b30488c..5c0b1ad7c5f7c81 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -18650,6 +18650,9 @@ Decl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, ObjCIvarDecl *NewID = ObjCIvarDecl::Create( Context, EnclosingContext, DeclStart, Loc, II, T, TInfo, ac, BitWidth); + if (T->containsErrors()) + NewID->setInvalidDecl(); + if (II) { NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName, ForVisibleRedeclaration); diff --git a/clang/test/SemaObjCXX/ivar-struct.mm b/clang/test/SemaObjCXX/ivar-struct.mm index c8c9ca9cbbf04f9..4a039a98abea6c1 100644 --- a/clang/test/SemaObjCXX/ivar-struct.mm +++ b/clang/test/SemaObjCXX/ivar-struct.mm @@ -1,8 +1,21 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -// expected-no-diagnostics +// RUN: %clang_cc1 -fsyntax-only -Wno-objc-root-class -verify %s @interface A { struct X { int x, y; } X; } @end + +static const uint32_t Count = 16; // expected-error {{unknown type name 'uint32_t'}} + +struct S0 { + S0(); +}; + +@interface C0 +@end + +@implementation C0 { + S0 ivar0[Count]; +} +@end _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits