xref: /llvm-project/clang/test/CodeGenCXX/gh119046.cpp (revision 820c6ac7f5e438cc268ecb1fa2c6b17f0d168000)
1 // RUN: %clang_cc1 -std=c++2a -triple x86_64-elf-gnu %s -emit-llvm -o - | FileCheck %s
2 
3 struct S {
4     consteval void operator()() {}
5 };
6 
7 template <class Fn>
8 constexpr void dispatch(Fn fn) {
9     fn();
10 }
11 
12 template <class Visitor>
13 struct value_visitor {
14     constexpr void operator()() { visitor(); }
15     Visitor&& visitor;
16 };
17 
18 template <class Visitor>
19 constexpr auto make_dispatch() {
20     return dispatch<value_visitor<S>>;
21 }
22 
23 template <class Visitor>
24 constexpr void visit(Visitor&&) {
25     make_dispatch<Visitor>();
26 }
27 
28 void f() { visit(S{}); }
29 
30 // CHECK: define {{.*}} @_Z1fv
31 // CHECK-NOT: define {{.*}} @_Z5visitI1SEvOT_
32 // CHECK-NOT: define {{.*}} @_Z13make_dispatchI1SEDav
33