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

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 2 09:06:55 PDT 2023


https://github.com/ahatanak created https://github.com/llvm/llvm-project/pull/68001

This fixes an assertion failure in InitializationSequence::Perform.

>From 82f68bfe98ab0bebf6d1c33a09645aaa55326c2b Mon Sep 17 00:00:00 2001
From: Akira Hatanaka <ahatanaka at apple.com>
Date: Mon, 2 Oct 2023 09:03:00 -0700
Subject: [PATCH] Mark an ObjCIvarDecl as invalid if its type contains errors

This fixes an assertion failure in InitializationSequence::Perform.
---
 clang/lib/Sema/SemaDecl.cpp          |  3 +++
 clang/test/SemaObjCXX/ivar-struct.mm | 17 +++++++++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 9c2f1e83ed3fbe9..de6023105253f03 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -18622,6 +18622,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