// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: cxx_compiler cxx_11 -c %s -o %t.o
// RUN: bindump %t.o | FileCheck prefixes %s


// References to declared entities
// CHECK-DAG: _Z3fooc{{$}}
void foo(char) {}
template <void (&)(char)> struct CB {};
// CHECK-DAG: _Z3bar2CBIL_Z3foocEE
void bar(CB<foo> cb) {}

// CHECK-DAG: _Z4test3CB2IL_Z7IsEmptyEE
extern "C" bool IsEmpty(char *);
template<bool (&)(char *)> struct CB2 {};
void test(CB2<IsEmpty> cb) {}

// CHECK-DAG: _Z3hhhI1QEDTpldtfp_1xdtL_Z1qE1xET_
struct Q {int x; } q;
template<class T> auto hhh(T p)->decltype(p.x + q.x);
template <> auto hhh(Q p)->decltype(p.x + q.x) { return 0; }

// CHECK-DAG: _Z3iiiI2Q1EDTpldtfp_1xL_ZN1Q1xEEET_
struct Q1 {int x; } q1;
template<class T> auto iii(T p)->decltype(p.x + Q::x);
template<> auto iii(Q1 p)->decltype(p.x + Q::x) { return 0; }

// CHECK-DAG: _Z3kkkI2S4EDTadsrT_onmiES1_
struct S4 {
    S4 operator-(S4 rhs) { return rhs; }
};
template<class T> auto kkk(T p)->decltype(&T::operator-);
template<> auto kkk(S4 p)->decltype(&S4::operator-) { return 0; }
