aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGenCXX/gh119046.cpp
blob: cad76879f08624b027b791504c37ab0883d7e3cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 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