blob: c34bd5b114cc6d288223cf52cb3b7d41206b67dc [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
3struct A { int a; };
4struct 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;
20
21 void f() {
22 // CHECK: icmp ne i64 {{.*}}, -1
23 if (a) { }
24
25 // CHECK: icmp ne i64 {{.*}}, -1
26 if (a != 0) { }
27
28 // CHECK: icmp ne i64 -1, {{.*}}
29 if (0 != a) { }
30
31 // CHECK: icmp eq i64 {{.*}}, -1
32 if (a == 0) { }
33
34 // CHECK: icmp eq i64 -1, {{.*}}
35 if (0 == a) { }
36 }
37}
38
Anders Carlssonfe404562010-02-02 03:23:38 +000039// Casts.
40namespace Casts {
41
Eli Friedman9b372742009-11-27 04:56:40 +000042int A::*pa;
43int C::*pc;
44
45void f() {
Anders Carlssonfe404562010-02-02 03:23:38 +000046 // CHECK: store i64 -1, i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000047 pa = 0;
48
49 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = add i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000050 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2pcE
Eli Friedman9b372742009-11-27 04:56:40 +000051 pc = pa;
52
53 // CHECK: [[ADJ:%[a-zA-Z0-9\.]+]] = sub i64 {{.*}}, 4
Anders Carlssonfe404562010-02-02 03:23:38 +000054 // CHECK: store i64 [[ADJ]], i64* @_ZN5Casts2paE
Eli Friedman9b372742009-11-27 04:56:40 +000055 pa = static_cast<int A::*>(pc);
56}
Anders Carlssonfe404562010-02-02 03:23:38 +000057
58}