blob: cab06dbd3d373fe366cc55c6ca5796975095599f [file] [log] [blame]
Anders Carlssonfe404562010-02-02 03:23:38 +00001// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-darwin10 | FileCheck %s
Eli Friedman9b372742009-11-27 04:56:40 +00002
Anders Carlsson45147d02010-02-02 03:37:46 +00003struct A { int a; int b; };
Eli Friedman9b372742009-11-27 04:56:40 +00004struct B { int b; };
5struct C : B, A { };
6
Anders Carlsson63b071f2010-02-02 03:32:35 +00007// Zero init.
8namespace ZeroInit {
9 // CHECK: @_ZN8ZeroInit1aE = global i64 -1
10 int A::* a;
11
12 // CHECK: @_ZN8ZeroInit2aaE = global [2 x i64] [i64 -1, i64 -1]
13 int A::* aa[2];
14
15 // CHECK: @_ZN8ZeroInit3aaaE = global [2 x [2 x i64]] {{\[}}[2 x i64] [i64 -1, i64 -1], [2 x i64] [i64 -1, i64 -1]]
16 int A::* aaa[2][2];
17
18 // CHECK: @_ZN8ZeroInit1bE = global i64 -1,
19 int A::* b = 0;
Anders Carlsson2c12d032010-02-02 05:17:25 +000020
21 // CHECK: @_ZN8ZeroInit2saE = global %struct.anon { i64 -1 }
22 struct {
23 int A::*a;
24 } sa;
25
Anders Carlsson7e673c42010-02-05 06:58:06 +000026 // CHECK: @_ZN8ZeroInit3ssaE =
27 // CHECK: [2 x i64] [i64 -1, i64 -1]
Anders Carlsson2c12d032010-02-02 05:17:25 +000028 struct {
29 int A::*aa[2];
30 } ssa[2];
31
32 // CHECK: @_ZN8ZeroInit2ssE = global %1 { %struct.anon { i64 -1 } }
33 struct {
34 struct {
35 int A::*pa;
36 } s;
37 } ss;
Anders Carlssona83fb4b2010-05-18 16:51:41 +000038
39 struct A {
40 int A::*a;
41 int b;
42 };
43
44 struct B {
45 A a[10];
46 char c;
47 int B::*b;
48 };
49
50 struct C : A, B { int j; };
51 // CHECK: @_ZN8ZeroInit1cE = global %"struct.ZeroInit::C" { [16 x i8] c"\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00", [176 x i8] c"\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF", i32 0, [4 x i8] zeroinitializer }
52 C c;
Anders Carlsson45147d02010-02-02 03:37:46 +000053}
Anders Carlsson63b071f2010-02-02 03:32:35 +000054
Anders Carlsson45147d02010-02-02 03:37:46 +000055// PR5674
56namespace PR5674 {
57 // CHECK: @_ZN6PR56742pbE = global i64 4
58 int A::*pb = &A::b;
Anders Carlsson63b071f2010-02-02 03:32:35 +000059}
60
Anders Carlssonfe404562010-02-02 03:23:38 +000061// Casts.
62namespace Casts {
63
Eli Friedman9b372742009-11-27 04:56:40 +000064int A::*pa;
65int C::*pc;
66
67void f() {
Anders Carlssonfe404562010-02-02 03:23:38 +000068 // CHECK: store i64 -1, i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000069 pa = 0;
70
71 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = add i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000072 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2pcE
Eli Friedman9b372742009-11-27 04:56:40 +000073 pc = pa;
74
75 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = sub i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000076 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000077 pa = static_cast<int A::*>(pc);
78}
Anders Carlssonfe404562010-02-02 03:23:38 +000079
80}
Anders Carlsson45147d02010-02-02 03:37:46 +000081
82// Comparisons
83namespace Comparisons {
84 void f() {
85 int A::*a;
86
87 // CHECK: icmp ne i64 {{.*}}, -1
88 if (a) { }
89
90 // CHECK: icmp ne i64 {{.*}}, -1
91 if (a != 0) { }
92
93 // CHECK: icmp ne i64 -1, {{.*}}
94 if (0 != a) { }
95
96 // CHECK: icmp eq i64 {{.*}}, -1
97 if (a == 0) { }
98
99 // CHECK: icmp eq i64 -1, {{.*}}
100 if (0 == a) { }
101 }
102}
Anders Carlsson3cb18bc2010-05-14 15:05:19 +0000103
104namespace ValueInit {
105
106struct A {
107 int A::*a;
108
109 char c;
110
111 A();
112};
113
114// CHECK: define void @_ZN9ValueInit1AC2Ev
115// CHECK: store i64 -1, i64*
116// CHECK: ret void
117A::A() : a() {}
118
119}
Anders Carlssona83fb4b2010-05-18 16:51:41 +0000120