blob: 3d741d502834290c8def1fb66aff930418184850 [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(
Nuno Lopes329763b2009-10-18 15:18:11 +000047 obj o = obj();
48}
John McCall3d6c1782010-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
Rafael Espindola0691a5c2011-01-25 19:10:24 +000064 // CHECK: define linkonce_odr void @_ZN5test11DC2Ev(%"struct.test1::D"* %this) unnamed_addr
John McCall3d6c1782010-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}