blob: 84a41c4622f3369c82575f2ee2961eb2897e85b2 [file] [log] [blame]
Sebastian Redl22653ba2011-08-30 19:58:05 +00001// RUN: %clang_cc1 -emit-llvm -o - -std=c++0x %s | FileCheck %s
2
3// construct
4
5struct E {
6 E();
7 E(E&&);
8};
9
10struct F {
11 F();
12 F(F&&);
13};
14
15struct G {
16 E e;
17};
18
19struct H : G {
20 F l;
21 E m;
22 F ar[2];
23};
24
25void f() {
26 H s;
27 // CHECK: call void @_ZN1HC1EOS_
28 H t(static_cast<H&&>(s));
29}
30
31
32// assign
33
34struct A {
35 A &operator =(A&&);
36};
37
38struct B {
39 B &operator =(B&&);
40};
41
42struct C {
43 A a;
44};
45
46struct D : C {
47 A a;
48 B b;
49 A ar[2];
50};
51
52void g() {
53 D d;
54 // CHECK: call {{.*}} @_ZN1DaSEOS_
55 d = D();
56}
57
58
59// move assignment ops
60
61// CHECK: define linkonce_odr {{.*}} @_ZN1DaSEOS_
62// CHECK: call {{.*}} @_ZN1CaSEOS_
63// CHECK: call {{.*}} @_ZN1AaSEOS_
64// CHECK: call {{.*}} @_ZN1BaSEOS_
65// array loop
66// CHECK: br i1
67// CHECK: call {{.*}} @_ZN1AaSEOS_
68
69// CHECK: define linkonce_odr {{.*}} @_ZN1CaSEOS_
70// CHECK: call {{.*}} @_ZN1AaSEOS_
71
72
73// move ctors
74
75// CHECK: define linkonce_odr void @_ZN1HC2EOS_
76// CHECK: call void @_ZN1GC2EOS_
77// CHECK: call void @_ZN1FC1EOS_
78// CHECK: call void @_ZN1EC1EOS_
79// array loop
80// CHECK: br i1
81// CHECK: call void @_ZN1FC1EOS_
82
83// CHECK: define linkonce_odr void @_ZN1GC2EOS_
84// CHECK: call void @_ZN1EC1EOS_