blob: 3a10cb1fcf3a6e257d41c96310cd86f9d74a64a8 [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
26 // CHECK: @_ZN8ZeroInit3ssaE = global [2 x %0] [%0 { [2 x i64] [i64 -1, i64 -1] }
27 struct {
28 int A::*aa[2];
29 } ssa[2];
30
31 // CHECK: @_ZN8ZeroInit2ssE = global %1 { %struct.anon { i64 -1 } }
32 struct {
33 struct {
34 int A::*pa;
35 } s;
36 } ss;
Anders Carlsson45147d02010-02-02 03:37:46 +000037}
Anders Carlsson63b071f2010-02-02 03:32:35 +000038
Anders Carlsson45147d02010-02-02 03:37:46 +000039// PR5674
40namespace PR5674 {
41 // CHECK: @_ZN6PR56742pbE = global i64 4
42 int A::*pb = &A::b;
Anders Carlsson63b071f2010-02-02 03:32:35 +000043}
44
Anders Carlssonfe404562010-02-02 03:23:38 +000045// Casts.
46namespace Casts {
47
Eli Friedman9b372742009-11-27 04:56:40 +000048int A::*pa;
49int C::*pc;
50
51void f() {
Anders Carlssonfe404562010-02-02 03:23:38 +000052 // CHECK: store i64 -1, i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000053 pa = 0;
54
55 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = add i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000056 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2pcE
Eli Friedman9b372742009-11-27 04:56:40 +000057 pc = pa;
58
59 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = sub i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000060 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000061 pa = static_cast<int A::*>(pc);
62}
Anders Carlssonfe404562010-02-02 03:23:38 +000063
64}
Anders Carlsson45147d02010-02-02 03:37:46 +000065
66// Comparisons
67namespace Comparisons {
68 void f() {
69 int A::*a;
70
71 // CHECK: icmp ne i64 {{.*}}, -1
72 if (a) { }
73
74 // CHECK: icmp ne i64 {{.*}}, -1
75 if (a != 0) { }
76
77 // CHECK: icmp ne i64 -1, {{.*}}
78 if (0 != a) { }
79
80 // CHECK: icmp eq i64 {{.*}}, -1
81 if (a == 0) { }
82
83 // CHECK: icmp eq i64 -1, {{.*}}
84 if (0 == a) { }
85 }
86}