[clang] 1925c7a - Mark an ObjCIvarDecl as invalid if its type contains errors (#68001)

via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 2 12:46:04 PDT 2023


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();
+};
+
+ at interface C0
+ at end
+
+ at implementation C0 {
+  S0 ivar0[Count];
+}
+ at end


        


More information about the cfe-commits mailing list