// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s // CHECK: %"struct.rdar20621065::B" = type { float, float } struct Empty { }; struct A { explicit A(unsigned a = 0xffffffff) : a(a) { } unsigned a; }; struct B : A, Empty { B() : A(), Empty() { } }; struct C : A, Empty { C() : A(), Empty() { } C(const C& other) : A(0x12345678), Empty(other) { } }; struct D : A, Empty { D& operator=(const D& other) { a = 0x87654321; Empty::operator=(other); return *this; } }; #define CHECK(x) if (!(x)) return __LINE__ // PR7012 // CHECK-LABEL: define{{.*}} i32 @_Z1fv() int f() { B b1; // Check that A::a is not overwritten by the Empty default constructor. CHECK(b1.a == 0xffffffff); C c1; C c2(c1); // Check that A::a has the value set in the C::C copy constructor. CHECK(c2.a == 0x12345678); D d1, d2; d2 = d1; // Check that A::as has the value set in the D copy assignment operator. CHECK(d2.a == 0x87654321); // Success! // CHECK: ret i32 0 return 0; } namespace PR8796 { struct FreeCell { }; union ThingOrCell { FreeCell t; FreeCell cell; }; struct Things { ThingOrCell things; }; Things x; } #ifdef HARNESS extern "C" void printf(const char *, ...); int main() { int result = f(); if (result == 0) printf("success!\n"); else printf("test on line %d failed!\n", result); return result; } #endif namespace rdar20621065 { struct A { float array[0]; }; struct B : A { float left; float right; }; // Type checked at the top of the file. B b; }; // This test used to crash when CGRecordLayout::getNonVirtualBaseLLVMFieldNo was called. namespace record_layout { struct X0 { int x[0]; }; template struct X2 : X0 { }; template struct X3 : X2 { X3() : X2() {} }; void test0() { X3(); } }