1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li // CHECK-LABEL: define void @_Z2fni
fn(int n)4*67e74705SXin Li void fn(int n) {
5*67e74705SXin Li // CHECK: icmp ult i{{32|64}} %{{[^ ]+}}, 3
6*67e74705SXin Li // CHECK: store i32 1
7*67e74705SXin Li // CHECK: store i32 2
8*67e74705SXin Li // CHECK: store i32 3
9*67e74705SXin Li // CHECK: sub {{.*}}, 12
10*67e74705SXin Li // CHECK: call void @llvm.memset
11*67e74705SXin Li new int[n] { 1, 2, 3 };
12*67e74705SXin Li }
13*67e74705SXin Li
14*67e74705SXin Li // CHECK-LABEL: define void @_Z15const_underflowv
const_underflow()15*67e74705SXin Li void const_underflow() {
16*67e74705SXin Li // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
17*67e74705SXin Li // CHECK: call i8* @_Zna{{.}}(i{{32|64}} -1)
18*67e74705SXin Li new int[2] { 1, 2, 3 };
19*67e74705SXin Li }
20*67e74705SXin Li
21*67e74705SXin Li // CHECK-LABEL: define void @_Z11const_exactv
const_exact()22*67e74705SXin Li void const_exact() {
23*67e74705SXin Li // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
24*67e74705SXin Li // CHECK-NOT: icmp eq i32*
25*67e74705SXin Li new int[3] { 1, 2, 3 };
26*67e74705SXin Li }
27*67e74705SXin Li
28*67e74705SXin Li // CHECK-LABEL: define void @_Z16const_sufficientv
const_sufficient()29*67e74705SXin Li void const_sufficient() {
30*67e74705SXin Li // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
31*67e74705SXin Li new int[4] { 1, 2, 3 };
32*67e74705SXin Li // CHECK: ret void
33*67e74705SXin Li }
34*67e74705SXin Li
35*67e74705SXin Li // CHECK-LABEL: define void @_Z22check_array_value_initv
check_array_value_init()36*67e74705SXin Li void check_array_value_init() {
37*67e74705SXin Li struct S;
38*67e74705SXin Li new (int S::*[3][4][5]) ();
39*67e74705SXin Li
40*67e74705SXin Li // CHECK: call i8* @_Zna{{.}}(i{{32 240|64 480}})
41*67e74705SXin Li // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 60
42*67e74705SXin Li
43*67e74705SXin Li // CHECK: phi
44*67e74705SXin Li // CHECK: store i{{32|64}} -1,
45*67e74705SXin Li // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 1
46*67e74705SXin Li // CHECK: icmp eq
47*67e74705SXin Li // CHECK: br i1
48*67e74705SXin Li }
49