summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-06-06 22:58:50 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-06-06 22:58:50 +0000
commit67164852a7cc0923b857c84c515ad67969e81a67 (patch)
treeaec4a77ec43431b393a064448f6c08ba6de81efd /clang/test/CodeGen
parent00e7dffefba3ce82eeaf31c2d9ce7f0d41a59426 (diff)
downloadbcm5719-llvm-67164852a7cc0923b857c84c515ad67969e81a67.tar.gz
bcm5719-llvm-67164852a7cc0923b857c84c515ad67969e81a67.zip
When doing arithmatic on vla pointer, make sure
to emit vla size to prevent an irgen crash. // rdar://11485774 llvm-svn: 158117
Diffstat (limited to 'clang/test/CodeGen')
-rw-r--r--clang/test/CodeGen/vla.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/CodeGen/vla.c b/clang/test/CodeGen/vla.c
index 9e62da52e02..d34f26b779e 100644
--- a/clang/test/CodeGen/vla.c
+++ b/clang/test/CodeGen/vla.c
@@ -142,3 +142,23 @@ int test4(unsigned n, char (*p)[n][n+1][6]) {
// CHECK-NEXT: ret i32 [[T7]]
return p2 - p;
}
+
+// rdar://11485774
+void test5(void)
+{
+ // CHECK: define void @test5(
+ int a[5], i = 0;
+ // CHECK: [[A:%.*]] = alloca [5 x i32], align 4
+ // CHECK-NEXT: [[I:%.*]] = alloca i32, align 4
+ // CHECK-NEXT: [[CL:%.*]] = alloca i32*, align 4
+ // CHECK-NEXT: store i32 0, i32* [[I]], align 4
+
+ (typeof(++i, (int (*)[i])a)){&a} += 0;
+ // CHECK-NEXT: [[Z:%.*]] = bitcast [5 x i32]* [[A]] to i32*
+ // CHECK-NEXT: store i32* [[Z]], i32** [[CL]]
+ // CHECK-NEXT: [[O:%.*]] = load i32** [[CL]]
+ // CHECK-NEXT: [[T:%.*]] = load i32* [[I]], align 4
+ // CHECK-NEXT: [[VLAIX:%.*]] = mul nsw i32 0, [[T]]
+ // CHECK-NEXT: [[ADDPTR:%.*]] = getelementptr inbounds i32* [[O]], i32 [[VLAIX]]
+ // CHECK-NEXT: store i32* [[ADDPTR]], i32** [[CL]]
+}
OpenPOWER on IntegriCloud