Clang Project

clang_source_code/test/CodeGenCXX/array-default-argument.cpp
1// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | FileCheck %s
2// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple -std=c++98 -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-EH
3
4struct A {
5  A();
6  ~A();
7};
8
9struct B {
10  B(A = A());
11  ~B();
12};
13
14void f();
15// CHECK-LABEL: define {{(dso_local )?}}void @_Z1gv()
16void g() {
17  // CHECK: br label %[[LOOP:.*]]
18
19  // [[LOOP]]:
20  // CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[TEMPORARY:.*]])
21  // CHECK-EH:  unwind label %[[PARTIAL_ARRAY_LPAD:.*]]
22  // CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A({{.*}}, [[TEMPORARY]])
23  // CHECK-EH:  unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]]
24  // CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[TEMPORARY]])
25  // CHECK-EH:  unwind label %[[PARTIAL_ARRAY_LPAD]]
26  // CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1
27  // CHECK: icmp eq
28  // CHECK: br i1 {{.*}} label %[[LOOP]]
29  B b[5];
30
31  // CHECK: {{call|invoke}} void @_Z1fv()
32  f();
33
34  // CHECK-NOT: @_ZN1AD1Ev(
35  // CHECK: {{call|invoke}} {{.*}} @_ZN1BD1Ev(
36}
37