blob: 6a7f43a5128714b1bd3bf4e87a4be79a77ce1d2a [file] [log] [blame]
John McCalle61b02b2010-05-04 01:53:42 +00001// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
Anders Carlssona42ab8f2009-06-16 03:37:31 +00002
3struct T {
4 T();
5 ~T();
6};
7
8void f(const T& t = T());
9
Fariborz Jahaniand460cb42009-08-05 18:17:32 +000010class X { // ...
11public:
12 X();
13 X(const X&, const T& t = T());
14};
15
Stephen Lin43622612013-08-15 06:47:53 +000016// CHECK-LABEL: define void @_Z1gv()
Anders Carlssona42ab8f2009-06-16 03:37:31 +000017void g() {
John McCalle61b02b2010-05-04 01:53:42 +000018 // CHECK: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
Hal Finkela2347ba2014-07-18 15:52:10 +000019 // CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG1]])
John McCalle61b02b2010-05-04 01:53:42 +000020 // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
Anders Carlssona42ab8f2009-06-16 03:37:31 +000021 f();
Fariborz Jahaniand460cb42009-08-05 18:17:32 +000022
John McCalle61b02b2010-05-04 01:53:42 +000023 // CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
Hal Finkela2347ba2014-07-18 15:52:10 +000024 // CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG2]])
John McCalle61b02b2010-05-04 01:53:42 +000025 // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
26 f();
27
28 // CHECK-NEXT: call void @_ZN1XC1Ev(
Fariborz Jahaniand460cb42009-08-05 18:17:32 +000029 X a;
John McCalle61b02b2010-05-04 01:53:42 +000030
31 // CHECK-NEXT: call void @_ZN1TC1Ev(
32 // CHECK-NEXT: call void @_ZN1XC1ERKS_RK1T(
33 // CHECK-NEXT: call void @_ZN1TD1Ev(
Fariborz Jahaniand460cb42009-08-05 18:17:32 +000034 X b(a);
John McCalle61b02b2010-05-04 01:53:42 +000035
36 // CHECK-NEXT: call void @_ZN1TC1Ev(
37 // CHECK-NEXT: call void @_ZN1XC1ERKS_RK1T(
38 // CHECK-NEXT: call void @_ZN1TD1Ev(
Fariborz Jahaniand460cb42009-08-05 18:17:32 +000039 X c = a;
Anders Carlssona42ab8f2009-06-16 03:37:31 +000040}
Nuno Lopesff3507b2009-10-18 15:18:11 +000041
42
Nuno Lopesff3507b2009-10-18 15:18:11 +000043class obj{ int a; float b; double d; };
Stephen Lin43622612013-08-15 06:47:53 +000044// CHECK-LABEL: define void @_Z1hv()
Nuno Lopesff3507b2009-10-18 15:18:11 +000045void h() {
John McCalle61b02b2010-05-04 01:53:42 +000046 // CHECK: call void @llvm.memset.p0i8.i64(
Nuno Lopesff3507b2009-10-18 15:18:11 +000047 obj o = obj();
48}
John McCalle61b02b2010-05-04 01:53:42 +000049
50// PR7028 - mostly this shouldn't crash
51namespace test1 {
52 struct A { A(); };
53 struct B { B(); ~B(); };
54
55 struct C {
56 C(const B &file = B());
57 };
58 C::C(const B &file) {}
59
60 struct D {
61 C c;
62 A a;
63
Stephen Lin43622612013-08-15 06:47:53 +000064 // CHECK-LABEL: define linkonce_odr void @_ZN5test11DC2Ev(%"struct.test1::D"* %this) unnamed_addr
John McCalle61b02b2010-05-04 01:53:42 +000065 // CHECK: call void @_ZN5test11BC1Ev(
66 // CHECK-NEXT: call void @_ZN5test11CC1ERKNS_1BE(
67 // CHECK-NEXT: call void @_ZN5test11BD1Ev(
68 // CHECK: call void @_ZN5test11AC1Ev(
69 D() : c(), a() {}
70 };
71
72 D d;
73}