File tree Expand file tree Collapse file tree 4 files changed +35
-3
lines changed Expand file tree Collapse file tree 4 files changed +35
-3
lines changed Original file line number Diff line number Diff line change @@ -297,6 +297,10 @@ Bug Fixes to C++ Support
297297 was only accepted at namespace scope but not at local function scope.
298298- Clang no longer tries to call consteval constructors at runtime when they appear in a member initializer.
299299 (`#782154 <https://github.com/llvm/llvm-project/issues/82154>`_`)
300+ - Fix crash when using an immediate-escalated function at global scope.
301+ (`#82258 <https://github.com/llvm/llvm-project/issues/82258 >`_)
302+ - Correctly immediate-escalate lambda conversion functions.
303+ (`#82258 <https://github.com/llvm/llvm-project/issues/82258 >`_)
300304
301305Bug Fixes to AST Handling
302306^^^^^^^^^^^^^^^^^^^^^^^^^
Original file line number Diff line number Diff line change @@ -1158,7 +1158,9 @@ class Sema final {
11581158 if (FD) {
11591159 FD->setWillHaveBody(true);
11601160 S.ExprEvalContexts.back().InImmediateFunctionContext =
1161- FD->isImmediateFunction();
1161+ FD->isImmediateFunction() ||
1162+ S.ExprEvalContexts[S.ExprEvalContexts.size() - 2]
1163+ .isConstantEvaluated();
11621164 S.ExprEvalContexts.back().InImmediateEscalatingFunctionContext =
11631165 S.getLangOpts().CPlusPlus20 && FD->isImmediateEscalating();
11641166 } else
Original file line number Diff line number Diff line change @@ -18311,7 +18311,6 @@ void Sema::CheckUnusedVolatileAssignment(Expr *E) {
1831118311}
1831218312
1831318313void Sema::MarkExpressionAsImmediateEscalating(Expr *E) {
18314- assert(!FunctionScopes.empty() && "Expected a function scope");
1831518314 assert(getLangOpts().CPlusPlus20 &&
1831618315 ExprEvalContexts.back().InImmediateEscalatingFunctionContext &&
1831718316 "Cannot mark an immediate escalating expression outside of an "
@@ -18328,7 +18327,8 @@ void Sema::MarkExpressionAsImmediateEscalating(Expr *E) {
1832818327 } else {
1832918328 assert(false && "expected an immediately escalating expression");
1833018329 }
18331- getCurFunction()->FoundImmediateEscalatingExpression = true;
18330+ if (FunctionScopeInfo *FI = getCurFunction())
18331+ FI->FoundImmediateEscalatingExpression = true;
1833218332}
1833318333
1833418334ExprResult 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