mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 21:06:06 +00:00

HandleImmediateInvocation can call MarkExpressionAsImmediateEscalating and should always be called before CheckImmediateEscalatingFunctionDefinition. However, we were not doing that in `ActFunctionBody`. Fixes #119046
33 lines
675 B
C++
33 lines
675 B
C++
// RUN: %clang_cc1 -std=c++2a -triple x86_64-elf-gnu %s -emit-llvm -o - | FileCheck %s
|
|
|
|
struct S {
|
|
consteval void operator()() {}
|
|
};
|
|
|
|
template <class Fn>
|
|
constexpr void dispatch(Fn fn) {
|
|
fn();
|
|
}
|
|
|
|
template <class Visitor>
|
|
struct value_visitor {
|
|
constexpr void operator()() { visitor(); }
|
|
Visitor&& visitor;
|
|
};
|
|
|
|
template <class Visitor>
|
|
constexpr auto make_dispatch() {
|
|
return dispatch<value_visitor<S>>;
|
|
}
|
|
|
|
template <class Visitor>
|
|
constexpr void visit(Visitor&&) {
|
|
make_dispatch<Visitor>();
|
|
}
|
|
|
|
void f() { visit(S{}); }
|
|
|
|
// CHECK: define {{.*}} @_Z1fv
|
|
// CHECK-NOT: define {{.*}} @_Z5visitI1SEvOT_
|
|
// CHECK-NOT: define {{.*}} @_Z13make_dispatchI1SEDav
|