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