https://github.com/Backl1ght updated https://github.com/llvm/llvm-project/pull/165098
>From d3c7fb25303a1416d4f8e79ac1e326902d85a7c3 Mon Sep 17 00:00:00 2001 From: Backl1ght <[email protected]> Date: Sat, 25 Oct 2025 14:25:55 +0000 Subject: [PATCH 1/4] fix --- clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 28925cca8f956..439a5317f06f1 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -7061,8 +7061,15 @@ NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, // anonymous unions in class templates). } - if (!ParentDependsOnArgs) + if (!ParentDependsOnArgs) { + if (auto Found = + CurrentInstantiationScope + ? CurrentInstantiationScope->getInstantiationOfIfExists(D) + : nullptr) { + return cast<NamedDecl>(Found->dyn_cast<Decl *>()); + } return D; + } ParentDC = FindInstantiatedContext(Loc, ParentDC, TemplateArgs); if (!ParentDC) >From 2d2222b9f30acc155234b0cbeb921a30a389537c Mon Sep 17 00:00:00 2001 From: Backl1ght <[email protected]> Date: Sat, 25 Oct 2025 15:18:42 +0000 Subject: [PATCH 2/4] add UT and release note --- clang/docs/ReleaseNotes.rst | 2 ++ clang/test/SemaCXX/lambda-unevaluated.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 92fc9381a5868..73fd07927cd2c 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -432,6 +432,8 @@ Bug Fixes in This Version - Fixed a failed assertion with empty filename arguments in ``__has_embed``. (#GH159898) - Fixed a failed assertion with empty filename in ``#embed`` directive. (#GH162951) - Fixed a crash triggered by unterminated ``__has_embed``. (#GH162953) +- Fixed a wrong diagnostic about a local variable inside a lambda in unevaluated + contexts need capture. (#GH163837) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/test/SemaCXX/lambda-unevaluated.cpp b/clang/test/SemaCXX/lambda-unevaluated.cpp index 9289fc9ec1243..4b0e1abdb38f0 100644 --- a/clang/test/SemaCXX/lambda-unevaluated.cpp +++ b/clang/test/SemaCXX/lambda-unevaluated.cpp @@ -282,3 +282,22 @@ static_assert(__is_same_as(int, helper<int>)); } // namespace GH138018 + +namespace GH163837 { + +template<int N> +void f(); + +template<class> +struct X { + using type = decltype([](auto) { + f<[]{ + int result = 0; + return result; + }()>(); + }(0)); +}; + +X<void> l; + +} // namespace GH163837 >From 23cc1a861daef35647cbe796087b177168e0e61a Mon Sep 17 00:00:00 2001 From: Backl1ght <[email protected]> Date: Sat, 25 Oct 2025 15:44:00 +0000 Subject: [PATCH 3/4] fix typo --- clang/docs/ReleaseNotes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 73fd07927cd2c..d3fc850d48fb1 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -433,7 +433,7 @@ Bug Fixes in This Version - Fixed a failed assertion with empty filename in ``#embed`` directive. (#GH162951) - Fixed a crash triggered by unterminated ``__has_embed``. (#GH162953) - Fixed a wrong diagnostic about a local variable inside a lambda in unevaluated - contexts need capture. (#GH163837) + context needs capture. (#GH163837) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >From 7b03e77c346bda988756628ccb08cd9c8eaca880 Mon Sep 17 00:00:00 2001 From: Backl1ght <[email protected]> Date: Sat, 1 Nov 2025 10:31:02 +0000 Subject: [PATCH 4/4] address comment --- clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 439a5317f06f1..da91f09c25d51 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -7062,11 +7062,12 @@ NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, } if (!ParentDependsOnArgs) { - if (auto Found = - CurrentInstantiationScope - ? CurrentInstantiationScope->getInstantiationOfIfExists(D) - : nullptr) { - return cast<NamedDecl>(Found->dyn_cast<Decl *>()); + if (CurrentInstantiationScope) { + if (llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *> *Found = + CurrentInstantiationScope->getInstantiationOfIfExists(D)) { + if (Decl* FD = Found->dyn_cast<Decl *>()) + return cast<NamedDecl>(FD); + } } return D; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
