xref: /llvm-project/clang/test/CodeGenCXX/default-arguments.cpp (revision 9daf10ff8f29ba3a88a105aaa9d2379c21b77d35)
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 namespace GH113324 {
16 struct S1 {
17   friend void f(S1, int = 42) {}
18 };
19 
20 void test() {
21   S1 s1;
22   f(s1);
23 }
24 };
25 
26 struct A1 {
27  A1();
28  ~A1();
29 };
30 
31 struct A2 {
32  A2();
33  ~A2();
34 };
35 
36 struct B {
37  B(const A1& = A1(), const A2& = A2());
38 };
39 
40 // CHECK-LABEL: define{{.*}} void @_Z2f1v()
41 void f1() {
42 
43  // CHECK: call void @_ZN2A1C1Ev(
44  // CHECK: call void @_ZN2A2C1Ev(
45  // CHECK: call void @_ZN1BC1ERK2A1RK2A2(
46  // CHECK: call void @_ZN2A2D1Ev
47  // CHECK: call void @_ZN2A1D1Ev
48  B bs[2];
49 }
50 
51 struct C {
52  B bs[2];
53  C();
54 };
55 
56 // CHECK-LABEL: define{{.*}} void @_ZN1CC2Ev(ptr {{[^,]*}} %this) unnamed_addr
57 // CHECK: call void @_ZN2A1C1Ev(
58 // CHECK: call void @_ZN2A2C1Ev(
59 // CHECK: call void @_ZN1BC1ERK2A1RK2A2(
60 // CHECK: call void @_ZN2A2D1Ev
61 // CHECK: call void @_ZN2A1D1Ev
62 
63 // CHECK-LABEL: define{{.*}} void @_ZN1CC1Ev(ptr {{[^,]*}} %this) unnamed_addr
64 // CHECK: call void @_ZN1CC2Ev(
65 C::C() { }
66 
67 // CHECK-LABEL: define{{.*}} void @_Z2f3v()
68 void f3() {
69  // CHECK: call void @_ZN2A1C1Ev(
70  // CHECK: call void @_ZN2A2C1Ev(
71  // CHECK: call void @_ZN1BC1ERK2A1RK2A2(
72  // CHECK: call void @_ZN2A2D1Ev
73  // CHECK: call void @_ZN2A1D1Ev
74  B *bs = new B[2];
75  delete bs;
76 }
77 
78 void f4() {
79   void g4(int a, int b = 7);
80   {
81     void g4(int a, int b = 5);
82   }
83   void g4(int a = 5, int b);
84 
85   // CHECK: call void @_Z2g4ii(i32 noundef 5, i32 noundef 7)
86   g4();
87 }
88