brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 1bc756c Raw
142 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-linux -emit-llvm -o - %s -fcxx-exceptions                                         | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-linux -emit-llvm -o - %s -fcxx-exceptions -fexperimental-new-constant-interpreter | FileCheck %s3 4#ifdef __SIZEOF_INT128__5// CHECK: @PR11705 = global i128 06__int128_t PR11705 = (__int128_t)&PR11705;7#endif8 9int arr[2];10// CHECK: @pastEnd = constant ptr getelementptr (i8, ptr @arr, i64 8)11int &pastEnd = arr[2];12 13// CHECK: @F = constant ptr @arr, align 814int &F = arr[0];15 16struct S {17  int a;18  float c[3];19};20 21// CHECK: @s = global %struct.S zeroinitializer, align 422S s;23// CHECK: @sp = constant ptr getelementptr (i8, ptr @s, i64 16), align 824float &sp = s.c[3];25 26namespace NearlyZeroInit {27  // CHECK: @_ZN14NearlyZeroInit1bE ={{.*}} global{{.*}} { i32, <{ i32, [2147483647 x i32] }> } { i32 1, <{ i32, [2147483647 x i32] }> <{ i32 2, [2147483647 x i32] zeroinitializer }> }{{.*}}28  struct B { int n; int arr[1024 * 1024 * 1024 * 2u]; } b = {1, {2}};29}30 31namespace BaseClassOffsets {32  struct A { int a; };33  struct B { int b; };34  struct C : A, B { int c; };35 36  extern C c;37  // CHECK: @_ZN16BaseClassOffsets1aE = global ptr @_ZN16BaseClassOffsets1cE, align 838  A* a = &c;39  // CHECK: @_ZN16BaseClassOffsets1bE = global ptr getelementptr (i8, ptr @_ZN16BaseClassOffsets1cE, i64 4), align 840  B* b = &c;41}42 43namespace ExprBase {44  struct A { int n; };45  struct B { int n; };46  struct C : A, B {};47 48  extern const int &&t = ((B&&)C{}).n;49  // CHECK: @_ZGRN8ExprBase1tE_ = internal global {{.*}} zeroinitializer,50  // CHECK: @_ZN8ExprBase1tE = constant ptr {{.*}} @_ZGRN8ExprBase1tE_, {{.*}} 851}52 53namespace reinterpretcast {54  const unsigned int n = 1234;55  extern const int &s = reinterpret_cast<const int&>(n);56  // CHECK: @_ZN15reinterpretcastL1nE = internal constant i32 1234, align 457  // CHECK: @_ZN15reinterpretcast1sE = constant ptr @_ZN15reinterpretcastL1nE, align 858 59  void *f1(unsigned long l) {60    return reinterpret_cast<void *>(l);61  }62  // CHECK: define {{.*}} ptr @_ZN15reinterpretcast2f1Em63  // CHECK: inttoptr64}65 66namespace Bitfield {67  struct S { int a : 5; ~S(); };68  // CHECK: alloca69  // CHECK: call {{.*}}memset70  // CHECK: store i32 {{.*}}, ptr @_ZGRN8Bitfield1rE_71  // CHECK: call void @_ZN8Bitfield1SD172  // CHECK: store ptr @_ZGRN8Bitfield1rE_, ptr @_ZN8Bitfield1rE, align 873  int &&r = S().a;74}75 76namespace Null {77  decltype(nullptr) null();78  // CHECK: call {{.*}} @_ZN4Null4nullEv(79  int *p = null();80  struct S {};81  // CHECK: call {{.*}} @_ZN4Null4nullEv(82  int S::*q = null();83}84 85struct A {86  A();87  ~A();88  enum E { Foo };89};90 91A *g();92 93void f(A *a) {94  A::E e1 = a->Foo;95 96  // CHECK: call noundef ptr @_Z1gv()97  A::E e2 = g()->Foo;98  // CHECK: call void @_ZN1AC1Ev(99  // CHECK: call void @_ZN1AD1Ev(100  A::E e3 = A().Foo;101}102 103int notdead() {104  auto l = [c=0]() mutable {105    return  c++ < 5 ? 10 : 12;106  };107  return l();108}109// CHECK: _ZZ7notdeadvEN3$_0clEv110// CHECK: ret i32 %cond111 112/// The conmparison of those two parameters should NOT work.113bool paramcmp(const int& lhs, const int& rhs) {114  if (&lhs == &rhs)115    return true;116  return false;117}118// CHECK: _Z8paramcmpRKiS0_119// CHECK: if.then120// CHECK: if.end121 122/// &x == &OuterX should work and return 0.123class X {124public:125  X();126  X(const X&);127  X(const volatile X &);128  ~X();129};130 131extern X OuterX;132 133X test24() {134  X x;135  if (&x == &OuterX)136    throw 0;137  return x;138}139// CHECK: _Z6test24v140// CHECK-NOT: eh.resume141// CHECK-NOT: unreachable142