blob: e4a06770cd9bb5ae6cf701d0a77d225ea23c0324 [file] [log] [blame]
John McCall3d6c1782010-05-04 01:53:42 +00001// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
Anders Carlssonf54741e2009-06-16 03:37:31 +00002
3struct T {
4 T();
5 ~T();
6};
7
8void f(const T& t = T());
9
Fariborz Jahaniancaa499b2009-08-05 18:17:32 +000010class X { // ...
11public:
12 X();
13 X(const X&, const T& t = T());
14};
15
John McCall3d6c1782010-05-04 01:53:42 +000016// CHECK: define void @_Z1gv()
Anders Carlssonf54741e2009-06-16 03:37:31 +000017void g() {
John McCall3d6c1782010-05-04 01:53:42 +000018 // CHECK: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
19 // CHECK-NEXT: call void @_Z1fRK1T([[T]]* [[AGG1]])
20 // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
Anders Carlssonf54741e2009-06-16 03:37:31 +000021 f();
Fariborz Jahaniancaa499b2009-08-05 18:17:32 +000022
John McCall3d6c1782010-05-04 01:53:42 +000023 // CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
24 // CHECK-NEXT: call void @_Z1fRK1T([[T]]* [[AGG2]])
25 // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
26 f();
27
28 // CHECK-NEXT: call void @_ZN1XC1Ev(
Fariborz Jahaniancaa499b2009-08-05 18:17:32 +000029 X a;
John McCall3d6c1782010-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 Jahaniancaa499b2009-08-05 18:17:32 +000034 X b(a);
John McCall3d6c1782010-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 Jahaniancaa499b2009-08-05 18:17:32 +000039 X c = a;
Anders Carlssonf54741e2009-06-16 03:37:31 +000040}
Nuno Lopes329763b2009-10-18 15:18:11 +000041
42
Nuno Lopes329763b2009-10-18 15:18:11 +000043class obj{ int a; float b; double d; };
John McCall3d6c1782010-05-04 01:53:42 +000044// CHECK: define void @_Z1hv()
Nuno Lopes329763b2009-10-18 15:18:11 +000045void h() {
John McCall3d6c1782010-05-04 01:53:42 +000046 // CHECK: call void @llvm.memset.p0i8.i64(
47 // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(
Nuno Lopes329763b2009-10-18 15:18:11 +000048 obj o = obj();
49}
John McCall3d6c1782010-05-04 01:53:42 +000050
51// PR7028 - mostly this shouldn't crash
52namespace test1 {
53 struct A { A(); };
54 struct B { B(); ~B(); };
55
56 struct C {
57 C(const B &file = B());
58 };
59 C::C(const B &file) {}
60
61 struct D {
62 C c;
63 A a;
64
65 // CHECK: define linkonce_odr void @_ZN5test11DC2Ev(
66 // CHECK: call void @_ZN5test11BC1Ev(
67 // CHECK-NEXT: call void @_ZN5test11CC1ERKNS_1BE(
68 // CHECK-NEXT: call void @_ZN5test11BD1Ev(
69 // CHECK: call void @_ZN5test11AC1Ev(
70 D() : c(), a() {}
71 };
72
73 D d;
74}