1 | // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s |
2 | |
3 | // PR5484 |
4 | namespace PR5484 { |
5 | struct A { }; |
6 | extern A a; |
7 | |
8 | void f(const A & = a); |
9 | |
10 | void g() { |
11 | f(); |
12 | } |
13 | } |
14 | |
15 | struct A1 { |
16 | A1(); |
17 | ~A1(); |
18 | }; |
19 | |
20 | struct A2 { |
21 | A2(); |
22 | ~A2(); |
23 | }; |
24 | |
25 | struct B { |
26 | B(const A1& = A1(), const A2& = A2()); |
27 | }; |
28 | |
29 | // CHECK-LABEL: define void @_Z2f1v() |
30 | void f1() { |
31 | |
32 | // CHECK: call void @_ZN2A1C1Ev( |
33 | // CHECK: call void @_ZN2A2C1Ev( |
34 | // CHECK: call void @_ZN1BC1ERK2A1RK2A2( |
35 | // CHECK: call void @_ZN2A2D1Ev |
36 | // CHECK: call void @_ZN2A1D1Ev |
37 | B bs[2]; |
38 | } |
39 | |
40 | struct C { |
41 | B bs[2]; |
42 | C(); |
43 | }; |
44 | |
45 | // CHECK-LABEL: define void @_ZN1CC2Ev(%struct.C* %this) unnamed_addr |
46 | // CHECK: call void @_ZN2A1C1Ev( |
47 | // CHECK: call void @_ZN2A2C1Ev( |
48 | // CHECK: call void @_ZN1BC1ERK2A1RK2A2( |
49 | // CHECK: call void @_ZN2A2D1Ev |
50 | // CHECK: call void @_ZN2A1D1Ev |
51 | |
52 | // CHECK-LABEL: define void @_ZN1CC1Ev(%struct.C* %this) unnamed_addr |
53 | // CHECK: call void @_ZN1CC2Ev( |
54 | C::C() { } |
55 | |
56 | // CHECK-LABEL: define void @_Z2f3v() |
57 | void f3() { |
58 | // CHECK: call void @_ZN2A1C1Ev( |
59 | // CHECK: call void @_ZN2A2C1Ev( |
60 | // CHECK: call void @_ZN1BC1ERK2A1RK2A2( |
61 | // CHECK: call void @_ZN2A2D1Ev |
62 | // CHECK: call void @_ZN2A1D1Ev |
63 | B *bs = new B[2]; |
64 | delete bs; |
65 | } |
66 | |
67 | void f4() { |
68 | void g4(int a, int b = 7); |
69 | { |
70 | void g4(int a, int b = 5); |
71 | } |
72 | void g4(int a = 5, int b); |
73 | |
74 | // CHECK: call void @_Z2g4ii(i32 5, i32 7) |
75 | g4(); |
76 | } |
77 | |