120 lines · cpp
1// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s2 3// CHECK: %"struct.rdar20621065::B" = type { float, float }4 5struct Empty { };6 7struct A { 8 explicit A(unsigned a = 0xffffffff) : a(a) { }9 10 unsigned a;11};12 13struct B : A, Empty { 14 B() : A(), Empty() { }15};16 17struct C : A, Empty {18 C() : A(), Empty() { }19 C(const C& other) : A(0x12345678), Empty(other) { }20};21 22struct D : A, Empty {23 D& operator=(const D& other) {24 a = 0x87654321;25 Empty::operator=(other);26 27 return *this;28 }29};30 31#define CHECK(x) if (!(x)) return __LINE__32 33// PR701234// CHECK-LABEL: define{{.*}} i32 @_Z1fv()35int f() {36 B b1;37 38 // Check that A::a is not overwritten by the Empty default constructor.39 CHECK(b1.a == 0xffffffff);40 41 C c1;42 C c2(c1);43 44 // Check that A::a has the value set in the C::C copy constructor.45 CHECK(c2.a == 0x12345678);46 47 D d1, d2;48 d2 = d1;49 50 // Check that A::as has the value set in the D copy assignment operator.51 CHECK(d2.a == 0x87654321);52 53 // Success!54 // CHECK: ret i32 055 return 0;56}57 58namespace PR8796 {59 struct FreeCell {60 };61 union ThingOrCell {62 FreeCell t;63 FreeCell cell;64 };65 struct Things {66 ThingOrCell things;67 };68 Things x;69}70 71#ifdef HARNESS72extern "C" void printf(const char *, ...);73 74int main() {75 int result = f();76 77 if (result == 0)78 printf("success!\n");79 else80 printf("test on line %d failed!\n", result);81 82 return result;83}84#endif85 86namespace rdar20621065 {87 struct A {88 float array[0];89 };90 91 struct B : A {92 float left;93 float right;94 };95 96 // Type checked at the top of the file.97 B b;98};99 100// This test used to crash when CGRecordLayout::getNonVirtualBaseLLVMFieldNo was called.101namespace record_layout {102struct X0 {103 int x[0];104};105 106template<typename>107struct X2 : X0 {108};109 110template<typename>111struct X3 : X2<int> {112 X3() : X2<int>() {}113};114 115 116void test0() {117 X3<int>();118}119}120