// RUN: %clang_cc1 -no-opaque-pointers %s -emit-llvm -triple %itanium_abi_triple -std=c++11 -o - | FileCheck %s
// RUN: %clang_cc1 -no-opaque-pointers %s -emit-llvm -triple i686-linux-gnu -std=c++11 -o - | FileCheck %s
// RUN: %clang_cc1 -no-opaque-pointers %s -emit-llvm -triple x86_64-linux-gnu -std=c++11 -o - | FileCheck %s
// RUN: %clang_cc1 -no-opaque-pointers %s -emit-llvm -triple powerpc64le-unknown-linux-gnu -std=c++11 -o - | FileCheck %s
;
;
;
;
;
;
A a1;
// CHECK-DAG: @_Z2a1B1AB1B =
A a2;
// CHECK-DAG: @_Z2a2B1AB1BB1CB1D =
B a3;
// CHECK-DAG: @a3 =
C<A> a4;
// CHECK-DAG: @_Z2a4B1AB1B =
D a5;
// CHECK-DAG: @a5 =
E<int> a6;
// CHECK-DAG: @_Z2a6B1CB1D =
E<A> a7;
// CHECK-DAG: @_Z2a7B1AB1BB1CB1D =
;
float E<float>::a8;
// CHECK-DAG: @_ZN1EB1CB1DIfE2a8E =
;
bool E<F>::a9;
// CHECK-DAG: @_ZN1EB1CB1DI1FB1AB1BE2a9E =
a10;
// vtable
// CHECK-DAG: @_ZTV3A10B1AB1B =
// typeinfo
// CHECK-DAG: @_ZTI3A10B1AB1B =
;
A10 B11::b;
// B11[abi:A]::b[abi:B]
// CHECK-DAG: @_ZN3B11B1A1bB1BE =
void*
// CHECK-DAG: define {{.*}} @_Z2f1B1CB1Dv(
A*
// CHECK-DAG: define {{.*}} @_Z2f2B1AB1BB1CB1Dv(
B*
// CHECK-DAG: define {{.*}} @_Z2f3v(
C<A>*
// CHECK-DAG: define {{.*}} @_Z2f4B1AB1Bv(
D*
// CHECK-DAG: define {{.*}} @_Z2f5v(
E<char>*
// CHECK-DAG: define {{.*}} @_Z2f6B1CB1Dv(
E<A>*
// CHECK-DAG: define {{.*}} @_Z2f7B1AB1BB1CB1Dv(
void
// CHECK-DAG: define {{.*}} @_Z2f8P1EB1CB1DI1AB1AB1BE(
inline
C1
// CHECK-DAG: @_Z2f9B6Names1v(
inline
C2
// CHECK-DAG: @_Z3f10B4Tag1B4Tag2v(
void
// f11[abi:A](A[abi:A][abi:B])
// CHECK-DAG: define {{.*}} @_Z3f11B1A1AB1AB1B(
A
// f12(A[abi:A][abi:B])
// CHECK-DAG: define {{.*}} @_Z3f121AB1AB1B(
inline void
void
// f13()::L::foo[abi:C][abi:D]()
// CHECK-DAG: define linkonce_odr {{(dso_local )?}}{{(noundef )?}}%struct.E* @_ZZ3f13vEN1L3fooB1CB1DEv(
// f13()::L::foo[abi:C][abi:D]()::a[abi:A][abi:B]
// CHECK-DAG: @_ZZZ3f13vEN1L3fooB1CB1DEvE1aB1AB1B =
// guard variable for f13()::L::foo[abi:C][abi:D]()::a[abi:A][abi:B]
// CHECK-DAG: @_ZGVZZ3f13vEN1L3fooB1CB1DEvE1aB1AB1B =
;
A14
// A14[abi:TAG]::f14()
// CHECK-DAG: define {{.+}} @_ZN3A14B3TAG3f14Ev(
T
void
// A14[abi:TAG] f15<A14[abi:TAG]>()
// CHECK-DAG: define linkonce_odr {{.+}} @_Z3f15I3A14B3TAGET_v(
A14
void
// A14[abi:TAG] f16<int>()
// CHECK-DAG: define linkonce_odr {{.+}} @_Z3f16IiE3A14B3TAGv(
;
void
// A17[abi:TAG]<int>::operator+(A17[abi:TAG]<int> const&)
// CHECK-DAG: define linkonce_odr {{.+}} @_ZN3A17B3TAGIiEplERKS0_(
;
void
// A18::operator A[abi:A][abi:B]() but GCC adds the same tags twice!
// CHECK-DAG: define linkonce_odr {{.+}} @_ZN3A18cv1AB1AB1BEv(
void
// f19_test(N19::C<N19::A, &N19::foo[abi:B]>, N19::F, N19::D)
// CHECK-DAG: define {{(dso_local )?}}void @_Z8f19_testN3N191CINS_1AEXadL_ZNS_3fooB1BES1_NS_1DEEEEENS_1FES2_(