1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
3 // Check mangling of Vtables, VTTs, and construction vtables that
4 // involve standard substitutions.
7 // CHECK: @_ZTVSd = linkonce_odr unnamed_addr constant
8 // CHECK: @_ZTTSd = linkonce_odr unnamed_addr constant
9 // CHECK: @_ZTCSd0_Si = linkonce_odr unnamed_addr constant
10 // CHECK: @_ZTCSd16_So = linkonce_odr unnamed_addr constant
11 // CHECK: @_ZTVSi = linkonce_odr unnamed_addr constant
12 // CHECK: @_ZTTSi = linkonce_odr unnamed_addr constant
13 // CHECK: @_ZTVSo = linkonce_odr unnamed_addr constant
14 // CHECK: @_ZTTSo = linkonce_odr unnamed_addr constant
19 // CHECK-LABEL: define{{.*}} void @_ZNSt1AC2Ev(%"struct.std::A"* {{[^,]*}} %this) unnamed_addr
20 // CHECK-LABEL: define{{.*}} void @_ZNSt1AC1Ev(%"struct.std::A"* {{[^,]*}} %this) unnamed_addr
25 template<typename
> struct allocator
{ };
28 // CHECK-LABEL: define{{.*}} void @_Z1fSaIcESaIiE
29 void f(std::allocator
<char>, std::allocator
<int>) { }
32 template<typename
, typename
, typename
> struct basic_string
{ };
35 // CHECK-LABEL: define{{.*}} void @_Z1fSbIcciE
36 void f(std::basic_string
<char, char, int>) { }
39 template<typename
> struct char_traits
{ };
41 typedef std::basic_string
<char, std::char_traits
<char>, std::allocator
<char> > string
;
45 void f(std::string
) { }
48 template<typename
, typename
> struct basic_ios
{
52 template<typename charT
, typename traits
= char_traits
<charT
> >
53 struct basic_istream
: virtual public basic_ios
<charT
, traits
> {
54 basic_istream(int x
) : basic_ios
<charT
, traits
>(x
), stored(x
) { }
58 template<typename charT
, typename traits
= char_traits
<charT
> >
59 struct basic_ostream
: virtual public basic_ios
<charT
, traits
> {
60 basic_ostream(int x
) : basic_ios
<charT
, traits
>(x
), stored(x
) { }
65 template<typename charT
, typename traits
= char_traits
<charT
> >
66 struct basic_iostream
: public basic_istream
<charT
, traits
>,
67 public basic_ostream
<charT
, traits
> {
68 basic_iostream(int x
) : basic_istream
<charT
, traits
>(x
),
69 basic_ostream
<charT
, traits
>(x
),
70 basic_ios
<charT
, traits
>(x
) { }
75 void f(std::basic_istream
<char, std::char_traits
<char> >) { }
78 void f(std::basic_ostream
<char, std::char_traits
<char> >) { }
81 void f(std::basic_iostream
<char, std::char_traits
<char> >) { }
86 typedef void (*terminate_handler
) ();
88 // CHECK: _ZSt13set_terminatePFvvE
89 terminate_handler
set_terminate(terminate_handler
) { return 0; }
93 // Make sure we don't treat the following like std::string
94 // CHECK-LABEL: define{{.*}} void @_Z1f12basic_stringIcSt11char_traitsIcESaIcEE
95 template<typename
, typename
, typename
> struct basic_string
{ };
96 typedef basic_string
<char, std::char_traits
<char>, std::allocator
<char> > not_string
;
97 void f(not_string
) { }
99 // Manglings for instantiations caused by this function are at the
101 void create_streams() {
102 std::basic_iostream
<char> bio(17);
105 // Make sure we don't mangle 'std' as 'St' here.
108 struct A
{ void f(); };
110 // CHECK-LABEL: define{{.*}} void @_ZN1N3std1A1fEv