brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · a02517f Raw
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