Fix the clang-wpa example.
[clang.git] / test / CodeGenCXX / empty-classes.cpp
blob1ce1dad40ffa55b508a2232e2e42aff3e057e5ac
1 // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s
3 struct Empty { };
5 struct A {
6 explicit A(unsigned a = 0xffffffff) : a(a) { }
8 unsigned a;
9 };
11 struct B : A, Empty {
12 B() : A(), Empty() { }
15 struct C : A, Empty {
16 C() : A(), Empty() { }
17 C(const C& other) : A(0x12345678), Empty(other) { }
20 struct D : A, Empty {
21 D& operator=(const D& other) {
22 a = 0x87654321;
23 Empty::operator=(other);
25 return *this;
29 #define CHECK(x) if (!(x)) return __LINE__
31 // PR7012
32 // CHECK: define i32 @_Z1fv()
33 int f() {
34 B b1;
36 // Check that A::a is not overwritten by the Empty default constructor.
37 CHECK(b1.a == 0xffffffff);
39 C c1;
40 C c2(c1);
42 // Check that A::a has the value set in the C::C copy constructor.
43 CHECK(c2.a == 0x12345678);
45 D d1, d2;
46 d2 = d1;
48 // Check that A::as has the value set in the D copy assignment operator.
49 CHECK(d2.a == 0x87654321);
51 // Success!
52 // CHECK: ret i32 0
53 return 0;
56 namespace PR8796 {
57 struct FreeCell {
59 union ThingOrCell {
60 FreeCell t;
61 FreeCell cell;
63 struct Things {
64 ThingOrCell things;
66 Things x;
69 #ifdef HARNESS
70 extern "C" void printf(const char *, ...);
72 int main() {
73 int result = f();
75 if (result == 0)
76 printf("success!\n");
77 else
78 printf("test on line %d failed!\n", result);
80 return result;
82 #endif