llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: None (llvmbot) <details> <summary>Changes</summary> Backport be40637a8 Requested by: @<!-- -->zyn0217 --- Full diff: https://github.com/llvm/llvm-project/pull/176848.diff 2 Files Affected: - (modified) clang/lib/Sema/SemaLambda.cpp (+6-1) - (modified) clang/test/SemaCXX/cxx2b-consteval-propagate.cpp (+14) ``````````diff diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp index c864a47e022bd..e1b1cd3e04946 100644 --- a/clang/lib/Sema/SemaLambda.cpp +++ b/clang/lib/Sema/SemaLambda.cpp @@ -2165,7 +2165,12 @@ ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, // set as CurContext seems more faithful to the source. TemplateOrNonTemplateCallOperatorDecl->setLexicalDeclContext(Class); - PopExpressionEvaluationContext(); + { + // TreeTransform of immediate functions may call getCurLambda, which + // requires both the paired LSI and the lambda DeclContext. + ContextRAII SavedContext(*this, CallOperator, /*NewThisContext=*/false); + PopExpressionEvaluationContext(); + } sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getPolicyInEffectAt(EndLoc); diff --git a/clang/test/SemaCXX/cxx2b-consteval-propagate.cpp b/clang/test/SemaCXX/cxx2b-consteval-propagate.cpp index 6da589dcf1b25..39097d17441f7 100644 --- a/clang/test/SemaCXX/cxx2b-consteval-propagate.cpp +++ b/clang/test/SemaCXX/cxx2b-consteval-propagate.cpp @@ -629,6 +629,20 @@ void fn() { } +namespace GH176045 { + +template <int NumArgs> struct MessageFormat { + template <int N> consteval MessageFormat(const char (&)[N]) {} +}; +template <typename... Ts> void format(MessageFormat<sizeof...(Ts)>, Ts ...args); + +auto message = [] { + format(""); + format(""); +}; + +} + namespace GH109096 { consteval void undefined(); `````````` </details> https://github.com/llvm/llvm-project/pull/176848 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
