126 lines · cpp
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s2// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -fclang-abi-compat=19 | FileCheck %s --check-prefix=CHECK-CLANG-193 4//CHECK: @_ZTCN16MangleCtorVTable4InstE0_NS_1A4ImplINS1_4WrapEEE5//CHECK-CLANG-19: @_ZTCN16MangleCtorVTable4InstE0_NS_1A4ImplINS0_4WrapEEE6 7struct X {};8 9// CHECK-LABEL: define{{.*}} void @_Z1f1XS_(10void f(X, X) { }11 12// CHECK-LABEL: define{{.*}} void @_Z1fR1XS0_(13void f(X&, X&) { }14 15// CHECK-LABEL: define{{.*}} void @_Z1fRK1XS1_(16void f(const X&, const X&) { }17 18typedef void T();19struct S {};20 21// CHECK-LABEL: define{{.*}} void @_Z1fPFvvEM1SFvvE(22void f(T*, T (S::*)) {}23 24namespace A {25 struct A { };26 struct B { };27};28 29// CHECK-LABEL: define{{.*}} void @_Z1fN1A1AENS_1BE(30void f(A::A a, A::B b) { }31 32struct C {33 struct D { };34};35 36// CHECK-LABEL: define{{.*}} void @_Z1fN1C1DERS_PS_S1_(37void f(C::D, C&, C*, C&) { }38 39template<typename T>40struct V {41 typedef int U;42};43 44template <typename T> void f1(typename V<T>::U, V<T>) { }45 46// CHECK: @_Z2f1IiEvN1VIT_E1UES2_47template void f1<int>(int, V<int>);48 49template <typename T> void f2(V<T>, typename V<T>::U) { }50 51// CHECK: @_Z2f2IiEv1VIT_ENS2_1UE52template void f2<int>(V<int>, int);53 54namespace NS {55template <typename T> struct S1 {};56template<typename T> void ft3(S1<T>, S1<char>) { }57 58// CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE59template void ft3<int>(S1<int>, S1<char>);60}61 62// PR519663// CHECK: @_Z1fPKcS0_64void f(const char*, const char*) {}65 66namespace NS {67 class C;68}69 70namespace NS {71 // CHECK: @_ZN2NS1fERNS_1CE72 void f(C&) { } 73}74 75namespace Test1 {76 77struct A { };78struct B { };79 80// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_81void f(void (B::*)(), A, A) { }82 83// CHECK: @_ZN5Test11fEMNS_1BEFvvENS_1AES3_MS0_FvS3_EMS3_FvvE84void f(void (B::*)(), A, A, void (B::*)(A), void (A::*)()) { }85 86}87 88namespace ManglePrefix {89template <typename>90struct X {91 template <typename>92 struct Y {93 typedef int type;94 typedef int type2;95 };96};97template <typename T>98typename X<T>::template Y<T>::type f(typename X<T>::template Y<T>::type2) { return 0; }99 100// CHECK: @_ZN12ManglePrefix1fIiEENS_1XIT_E1YIS2_E4typeENS5_5type2E101template int f<int>(int);102}103 104namespace MangleCtorVTable {105namespace A {106 107class VBase {108 public:109 virtual ~VBase() {};110};111 112struct Wrap {};113 114template <typename T>115class Impl : public virtual VBase {116 public:117};118 119} // namespace A120 121struct Inst : public A::Impl<A::Wrap> {};122 123void Test() { Inst a; }124 125}126