brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · e76fe81 Raw
113 lines · cpp
1// RUN: %clang_cc1 -triple i386-unknown-unknown -std=c++11 -emit-llvm -o - %s -Wno-address-of-temporary | FileCheck %s2 3// CHECK: @[[THREE_NULL_MEMPTRS:.*]] = private constant [3 x i32] [i32 -1, i32 -1, i32 -1]4 5struct A { int a[1]; };6typedef A x[];7int f() {8  x{{{1}}};9  // CHECK-LABEL: define{{.*}} i32 @_Z1fv10  // CHECK: store i32 111  // (It's okay if the output changes here, as long as we don't crash.)12  return 0;13}14 15namespace ValueInitArrayOfMemPtr {16  struct S {};17  typedef int (S::*p);18  typedef p a[3];19  void f(const a &);20 21  struct Agg1 {22    int n;23    p x;24  };25 26  struct Agg2 {27    int n;28    a x;29  };30 31  struct S1 {32    p x;33    S1();34  };35 36  // CHECK-LABEL: define{{.*}} void @_ZN22ValueInitArrayOfMemPtr1fEi37  void f(int n) {38    Agg1 a = { n };39    // CHECK: store i32 -1,40 41    Agg2 b = { n };42    // CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 %{{.*}}, ptr align 4 @[[THREE_NULL_MEMPTRS]], i32 12, i1 false)43  }44 45  // Test dynamic initialization.46  // CHECK-LABEL: define{{.*}} void @_ZN22ValueInitArrayOfMemPtr1gEMNS_1SEi47  void g(p ptr) {48    // CHECK: store i32 -1,49    f(a{ptr});50  }51}52 53namespace array_dtor {54  struct S { S(); ~S(); };55  using T = S[3];56  void f(const T &);57  void f(T *);58  // CHECK-LABEL: define{{.*}} void @_ZN10array_dtor1gEv(59  void g() {60    // CHECK: %[[ARRAY:.*]] = alloca [3 x61    // CHECK: br62 63    // Construct loop.64    // CHECK: call void @_ZN10array_dtor1SC1Ev(65    // CHECK: br i166 67    // CHECK: call void @_ZN10array_dtor1fERA3_KNS_1SE(68    // CHECK: br69 70    // Destruct loop.71    // CHECK: call void @_ZN10array_dtor1SD1Ev(72    // CHECK: br i173    f(T{});74 75    // CHECK: ret void76  }77  // CHECK-LABEL: define{{.*}} void @_ZN10array_dtor1hEv(78  void h() {79    // CHECK: %[[ARRAY:.*]] = alloca [3 x80    // CHECK: br81 82    // CHECK: call void @_ZN10array_dtor1SC1Ev(83    // CHECK: br i184    T &&t = T{};85 86    // CHECK: call void @_ZN10array_dtor1fERA3_KNS_1SE(87    // CHECK: br88    f(t);89 90    // CHECK: call void @_ZN10array_dtor1SD1Ev(91    // CHECK: br i192 93    // CHECK: ret void94  }95  // CHECK-LABEL: define{{.*}} void @_ZN10array_dtor1iEv(96  void i() {97    // CHECK: %[[ARRAY:.*]] = alloca [3 x98    // CHECK: br99 100    // CHECK: call void @_ZN10array_dtor1SC1Ev(101    // CHECK: br i1102 103    // CHECK: call void @_ZN10array_dtor1fEPA3_NS_1SE(104    // CHECK: br105 106    // CHECK: call void @_ZN10array_dtor1SD1Ev(107    // CHECK: br i1108    f(&T{});109 110    // CHECK: ret void111  }112}113