From ba72adf11519440ceffec0f47df7fecb8901117e Mon Sep 17 00:00:00 2001 From: Matheus Izvekov Date: Sun, 21 Sep 2025 14:50:34 -0300 Subject: [PATCH] [clang] fix using enum redecl in template regression This fixes a regression reported here: https://github.com/llvm/llvm-project/pull/155313#issuecomment-3315883183 Since this regression was never released, there are no release notes. --- clang/lib/Sema/SemaCXXScopeSpec.cpp | 5 +++-- clang/test/SemaCXX/cxx20-using-enum.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index e89243b9d767a..97ba1a510cee4 100644 --- a/clang/lib/Sema/SemaCXXScopeSpec.cpp +++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp @@ -220,10 +220,11 @@ bool Sema::RequireCompleteDeclContext(CXXScopeSpec &SS, /// bool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) { - if (EnumD->isCompleteDefinition()) { + if (EnumDecl *Def = EnumD->getDefinition(); + Def && Def->isCompleteDefinition()) { // If we know about the definition but it is not visible, complain. NamedDecl *SuggestedDef = nullptr; - if (!hasReachableDefinition(EnumD, &SuggestedDef, + if (!hasReachableDefinition(Def, &SuggestedDef, /*OnlyNeedComplete*/ false)) { // If the user is going to see an error here, recover by making the // definition visible. diff --git a/clang/test/SemaCXX/cxx20-using-enum.cpp b/clang/test/SemaCXX/cxx20-using-enum.cpp index 775b65c5a8d8e..0ae6f4c9a07b6 100644 --- a/clang/test/SemaCXX/cxx20-using-enum.cpp +++ b/clang/test/SemaCXX/cxx20-using-enum.cpp @@ -288,4 +288,14 @@ struct S { }; }; } + +namespace Redecl { + enum class A : int { X }; + enum class A : int; + template struct B { + using enum A; + using Z = decltype(X); + }; + template struct B; +} // namespace Redecl #endif