File tree Expand file tree Collapse file tree 4 files changed +36
-3
lines changed
Expand file tree Collapse file tree 4 files changed +36
-3
lines changed Original file line number Diff line number Diff line change @@ -1099,6 +1099,11 @@ Bug Fixes to C++ Support
10991099- Fix incorrect code generation caused by the object argument of ``static operator() `` and ``static operator[] `` calls not being evaluated.
11001100 Fixes (`#67976 <https://github.com/llvm/llvm-project/issues/67976 >`_)
11011101
1102+ - Fix crash when using an immediate-escalated function at global scope.
1103+ (`#82258 <https://github.com/llvm/llvm-project/issues/82258 >`_)
1104+ - Correctly immediate-escalate lambda conversion functions.
1105+ (`#82258 <https://github.com/llvm/llvm-project/issues/82258 >`_)
1106+
11021107Bug Fixes to AST Handling
11031108^^^^^^^^^^^^^^^^^^^^^^^^^
11041109- Fixed an import failure of recursive friend class template.
Original file line number Diff line number Diff line change @@ -1090,7 +1090,9 @@ class Sema final {
10901090 if (FD) {
10911091 FD->setWillHaveBody(true);
10921092 S.ExprEvalContexts.back().InImmediateFunctionContext =
1093- FD->isImmediateFunction();
1093+ FD->isImmediateFunction() ||
1094+ S.ExprEvalContexts[S.ExprEvalContexts.size() - 2]
1095+ .isConstantEvaluated();
10941096 S.ExprEvalContexts.back().InImmediateEscalatingFunctionContext =
10951097 S.getLangOpts().CPlusPlus20 && FD->isImmediateEscalating();
10961098 } else
Original file line number Diff line number Diff line change @@ -18294,7 +18294,6 @@ void Sema::CheckUnusedVolatileAssignment(Expr *E) {
1829418294}
1829518295
1829618296void Sema::MarkExpressionAsImmediateEscalating(Expr *E) {
18297- assert(!FunctionScopes.empty() && "Expected a function scope");
1829818297 assert(getLangOpts().CPlusPlus20 &&
1829918298 ExprEvalContexts.back().InImmediateEscalatingFunctionContext &&
1830018299 "Cannot mark an immediate escalating expression outside of an "
@@ -18311,7 +18310,8 @@ void Sema::MarkExpressionAsImmediateEscalating(Expr *E) {
1831118310 } else {
1831218311 assert(false && "expected an immediately escalating expression");
1831318312 }
18314- getCurFunction()->FoundImmediateEscalatingExpression = true;
18313+ if (FunctionScopeInfo *FI = getCurFunction())
18314+ FI->FoundImmediateEscalatingExpression = true;
1831518315}
1831618316
1831718317ExprResult Sema::CheckForImmediateInvocation(ExprResult E, FunctionDecl *Decl) {
Original file line number Diff line number Diff line change @@ -368,3 +368,29 @@ vector<void> v{};
368368// expected-note@-2 {{in call to 'vector()'}}
369369
370370}
371+
372+
373+ namespace GH82258 {
374+
375+ template <class R , class Pred >
376+ constexpr auto none_of (R&& r, Pred pred) -> bool { return true ; }
377+
378+ struct info { int value; };
379+ consteval auto is_invalid (info i) -> bool { return false ; }
380+ constexpr info types[] = { {1 }, {3 }, {5 }};
381+
382+ static_assert (none_of(
383+ types,
384+ +[](info i) consteval {
385+ return is_invalid (i);
386+ }
387+ ));
388+
389+ static_assert (none_of(
390+ types,
391+ []{
392+ return is_invalid;
393+ }()
394+ ));
395+
396+ }
You can’t perform that action at this time.
0 commit comments