https://github.com/shafik updated 
https://github.com/llvm/llvm-project/pull/143754

>From 41e1b10a325aef9d7535b222e4c4ca909463d7fd Mon Sep 17 00:00:00 2001
From: Shafik Yaghmour <shafik.yaghm...@intel.com>
Date: Tue, 10 Jun 2025 18:56:12 -0700
Subject: [PATCH 1/2] [Clang][Sema] Check the return value of
 DiagnoseClassNameShadow in ActOnEnumConstant

Static analysis flagged that we were not checking the return value of
DiagnoseClassNameShadow when we did so everywhere else. Modifying this case
to match how other places uses it makes sense and does not change behavior.
Likely if this check fails later actions will fail as well but it is more
correct to exit early.
---
 clang/lib/Sema/SemaDecl.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index bbd63372c168b..cfb58e33980d2 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -20134,9 +20134,10 @@ Decl *Sema::ActOnEnumConstant(Scope *S, Decl 
*theEnumDecl, Decl *lastEnumConst,
   // different from T:
   // - every enumerator of every member of class T that is an unscoped
   // enumerated type
-  if (getLangOpts().CPlusPlus && !TheEnumDecl->isScoped())
-    DiagnoseClassNameShadow(TheEnumDecl->getDeclContext(),
-                            DeclarationNameInfo(Id, IdLoc));
+  if (getLangOpts().CPlusPlus && !TheEnumDecl->isScoped() &&
+      DiagnoseClassNameShadow(TheEnumDecl->getDeclContext(),
+                              DeclarationNameInfo(Id, IdLoc)))
+    return nullptr;
 
   EnumConstantDecl *New =
     CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val);

>From 66990b51b6dfc053e2152767b0df8f05da184a68 Mon Sep 17 00:00:00 2001
From: Shafik Yaghmour <shafik.yaghm...@intel.com>
Date: Fri, 15 Aug 2025 14:00:02 -0700
Subject: [PATCH 2/2] Adding test to confirm we don't create enumerator that
 shadows.

---
 clang/test/CXX/class/class.mem/p13.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/clang/test/CXX/class/class.mem/p13.cpp 
b/clang/test/CXX/class/class.mem/p13.cpp
index d947586c41940..c534eb2f23530 100644
--- a/clang/test/CXX/class/class.mem/p13.cpp
+++ b/clang/test/CXX/class/class.mem/p13.cpp
@@ -114,3 +114,12 @@ template<typename B> struct CtorDtorName : B {
   CtorDtorName();
   ~CtorDtorName(); // expected-error {{identifier 'CtorDtorName' after '~' in 
destructor name does not name a type}}
 };
+
+struct S {
+  enum E {
+    R = 11,
+    S = 12  // expected-error{{member 'S' has the same name as its class}}
+  };
+  static_assert(E::R == 11, "E::R is not 11");
+  static_assert(E::S == 12, "E::S is not 12");  // expected-error{{no member 
named 'S' in 'S::E'}}
+};

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to