1981b6fde6992567d8be03ba77dabe1efc3ff33d1Argyrios Kyrtzidis// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s 28f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman 38f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedmanint b(char* x); 48f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman 58f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman// Extremely basic VLA test 68f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedmanvoid a(int x) { 78f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman char arry[x]; 88f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman arry[0] = 10; 98f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman b(arry); 108f39f5e96ce4a5f401f431f61db7df1cf05dce6fEli Friedman} 11b50525ba0e996bc072cdb76152fcfe0bc64bb72aAnders Carlsson 120269709723e4cb0836a1a50964949e96dc0d1173Anders Carlssonint c(int n) 13b50525ba0e996bc072cdb76152fcfe0bc64bb72aAnders Carlsson{ 140269709723e4cb0836a1a50964949e96dc0d1173Anders Carlsson return sizeof(int[n]); 15b50525ba0e996bc072cdb76152fcfe0bc64bb72aAnders Carlsson} 16c756a8ebee5c896a01f2c564bf4ba800c0beda21Anders Carlsson 17c756a8ebee5c896a01f2c564bf4ba800c0beda21Anders Carlssonint f0(int x) { 18c756a8ebee5c896a01f2c564bf4ba800c0beda21Anders Carlsson int vla[x]; 19c756a8ebee5c896a01f2c564bf4ba800c0beda21Anders Carlsson return vla[x-1]; 20c756a8ebee5c896a01f2c564bf4ba800c0beda21Anders Carlsson} 2122ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson 2222ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlssonvoid 2322ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlssonf(int count) 2422ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson{ 2522ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson int a[count]; 2622ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson 2722ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson do { } while (0); 2822ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson 2922ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson if (a[0] != 3) { 3022ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson } 3122ab8d86ec613ace6602b6de11fa9ccc08580f6bAnders Carlsson} 32bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedman 33bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedmanvoid g(int count) { 34bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedman // Make sure we emit sizes correctly in some obscure cases 35bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedman int (*a[5])[count]; 36bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedman int (*b)[][count]; 37bdad6b69f1214fb20116795f8e8cbf881e3017c6Eli Friedman} 384ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis 394ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis// rdar://8403108 4093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @f_8403108 414ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidisvoid f_8403108(unsigned x) { 424ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis // CHECK: call i8* @llvm.stacksave() 434ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis char s1[x]; 444ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis while (1) { 454ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis // CHECK: call i8* @llvm.stacksave() 464ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis char s2[x]; 474ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis if (1) 484ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis break; 494ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis // CHECK: call void @llvm.stackrestore(i8* 504ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis } 514ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis // CHECK: call void @llvm.stackrestore(i8* 524ada2ca7d82dab68d3646f3eb6dcdfee072e8ea4Argyrios Kyrtzidis} 53f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian 54f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian// pr7827 55745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanianvoid function(short width, int data[][width]) {} // expected-note {{passing argument to parameter 'data' here}} 56f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian 57f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanianvoid test() { 58745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian int bork[4][13]; 59f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian // CHECK: call void @function(i16 signext 1, i32* null) 60f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian function(1, 0); 61745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian // CHECK: call void @function(i16 signext 1, i32* inttoptr 62745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian function(1, 0xbadbeef); // expected-warning {{incompatible integer to pointer conversion passing}} 63745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian // CHECK: call void @function(i16 signext 1, i32* {{.*}}) 64745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian function(1, bork); 65745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian} 66745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian 67745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanianvoid function1(short width, int data[][width][width]) {} 68745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanianvoid test1() { 69745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian int bork[4][13][15]; 70745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian // CHECK: call void @function1(i16 signext 1, i32* {{.*}}) 71745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian function1(1, bork); 72745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian // CHECK: call void @function(i16 signext 1, i32* {{.*}}) 73745da3a5bb4ea35f93f50301e7fbbb7d78d3b6bbFariborz Jahanian function(1, bork[2]); 74f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian} 75f4435703872acb6eb0ff01b52414584e08d9ee35Fariborz Jahanian 76c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian// rdar://8476159 77c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanianstatic int GLOB; 78c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanianint test2(int n) 79c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian{ 80c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian GLOB = 0; 81c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian char b[1][n+3]; /* Variable length array. */ 82c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian // CHECK: [[tmp_1:%.*]] = load i32* @GLOB, align 4 83c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian // CHECK-NEXT: add nsw i32 [[tmp_1]], 1 84c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian __typeof__(b[GLOB++]) c; 85c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian return GLOB; 86c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian} 87c5be7b0fc804d8e6f87298ec03c94d8cccd74f29Fariborz Jahanian 88981b6fde6992567d8be03ba77dabe1efc3ff33d1Argyrios Kyrtzidis// http://llvm.org/PR8567 8993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define double @test_PR8567 90981b6fde6992567d8be03ba77dabe1efc3ff33d1Argyrios Kyrtzidisdouble test_PR8567(int n, double (*p)[n][5]) { 91bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK: [[NV:%.*]] = alloca i32, align 4 92bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[PV:%.*]] = alloca [5 x double]*, align 4 93bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: store 94bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: store 95bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[N:%.*]] = load i32* [[NV]], align 4 96bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[P:%.*]] = load [5 x double]** [[PV]], align 4 97913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T0:%.*]] = mul nsw i32 1, [[N]] 98bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [5 x double]* [[P]], i32 [[T0]] 99bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds [5 x double]* [[T1]], i32 2 100bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [5 x double]* [[T2]], i32 0, i32 3 101bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: [[T4:%.*]] = load double* [[T3]] 102bc8d40d85f3fa1e34569834916f18fecaa635152John McCall // CHECK-NEXT: ret double [[T4]] 103981b6fde6992567d8be03ba77dabe1efc3ff33d1Argyrios Kyrtzidis return p[1][2][3]; 104981b6fde6992567d8be03ba77dabe1efc3ff33d1Argyrios Kyrtzidis} 105913dab2525cc705e5238023a446f5371fa411883John McCall 106913dab2525cc705e5238023a446f5371fa411883John McCallint test4(unsigned n, char (*p)[n][n+1][6]) { 10793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define i32 @test4( 108913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK: [[N:%.*]] = alloca i32, align 4 109913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[P:%.*]] = alloca [6 x i8]*, align 4 110913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[P2:%.*]] = alloca [6 x i8]*, align 4 111913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: store i32 112913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: store [6 x i8]* 113913dab2525cc705e5238023a446f5371fa411883John McCall 114913dab2525cc705e5238023a446f5371fa411883John McCall // VLA captures. 115913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[DIM0:%.*]] = load i32* [[N]], align 4 116913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T0:%.*]] = load i32* [[N]], align 4 117913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[DIM1:%.*]] = add i32 [[T0]], 1 118913dab2525cc705e5238023a446f5371fa411883John McCall 119913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T0:%.*]] = load [6 x i8]** [[P]], align 4 120913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T1:%.*]] = load i32* [[N]], align 4 121913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T2:%.*]] = udiv i32 [[T1]], 2 122913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T3:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]] 123913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T4:%.*]] = mul nsw i32 [[T2]], [[T3]] 124913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T5:%.*]] = getelementptr inbounds [6 x i8]* [[T0]], i32 [[T4]] 125913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T6:%.*]] = load i32* [[N]], align 4 126913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T7:%.*]] = udiv i32 [[T6]], 4 127913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T8:%.*]] = sub i32 0, [[T7]] 128913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T9:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]] 129913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T10:%.*]] = mul nsw i32 [[T8]], [[T9]] 130913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T11:%.*]] = getelementptr inbounds [6 x i8]* [[T5]], i32 [[T10]] 131913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: store [6 x i8]* [[T11]], [6 x i8]** [[P2]], align 4 132913dab2525cc705e5238023a446f5371fa411883John McCall __typeof(p) p2 = (p + n/2) - n/4; 133913dab2525cc705e5238023a446f5371fa411883John McCall 134913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T0:%.*]] = load [6 x i8]** [[P2]], align 4 135913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T1:%.*]] = load [6 x i8]** [[P]], align 4 136913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T2:%.*]] = ptrtoint [6 x i8]* [[T0]] to i32 137913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T3:%.*]] = ptrtoint [6 x i8]* [[T1]] to i32 138913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T4:%.*]] = sub i32 [[T2]], [[T3]] 139913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T5:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]] 140913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T6:%.*]] = mul nuw i32 6, [[T5]] 141913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: [[T7:%.*]] = sdiv exact i32 [[T4]], [[T6]] 142913dab2525cc705e5238023a446f5371fa411883John McCall // CHECK-NEXT: ret i32 [[T7]] 143913dab2525cc705e5238023a446f5371fa411883John McCall return p2 - p; 144913dab2525cc705e5238023a446f5371fa411883John McCall} 1452ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian 1462ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian// rdar://11485774 1472ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanianvoid test5(void) 1482ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian{ 14993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define void @test5( 1502ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian int a[5], i = 0; 1512ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK: [[A:%.*]] = alloca [5 x i32], align 4 1522ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK-NEXT: [[I:%.*]] = alloca i32, align 4 1532ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK-NEXT: [[CL:%.*]] = alloca i32*, align 4 1542ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK-NEXT: store i32 0, i32* [[I]], align 4 1552ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian 1562ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian (typeof(++i, (int (*)[i])a)){&a} += 0; 1572ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK-NEXT: [[Z:%.*]] = load i32* [[I]], align 4 158ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[Z]], 1 159ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32 [[INC]], i32* [[I]], align 4 160ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[O:%.*]] = load i32* [[I]], align 4 161ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[AR:%.*]] = getelementptr inbounds [5 x i32]* [[A]], i32 0, i32 0 162ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[T:%.*]] = bitcast [5 x i32]* [[A]] to i32* 163ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32* [[T]], i32** [[CL]] 164ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[TH:%.*]] = load i32** [[CL]] 165ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[VLAIX:%.*]] = mul nsw i32 0, [[O]] 166ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[ADDPTR:%.*]] = getelementptr inbounds i32* [[TH]], i32 [[VLAIX]] 1672ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian // CHECK-NEXT: store i32* [[ADDPTR]], i32** [[CL]] 1682ccc0f9c23e6b948a4db6ffe46aefa098e1a2956Fariborz Jahanian} 169ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian 170ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanianvoid test6(void) 171ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian{ 17293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define void @test6( 173ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian int n = 20, **a, i=0; 174ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK: [[N:%.*]] = alloca i32, align 4 175ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[A:%.*]] = alloca i32**, align 4 176ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[I:%.*]] = alloca i32, align 4 177ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian (int (**)[i]){&a}[0][1][5] = 0; 178ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[CL:%.*]] = alloca i32**, align 4 179ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32 20, i32* [[N]], align 4 180ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32 0, i32* [[I]], align 4 181ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[Z:%.*]] = load i32* [[I]], align 4 182ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[O:%.*]] = bitcast i32*** [[A]] to i32** 183ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32** [[O]], i32*** [[CL]] 184ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[T:%.*]] = load i32*** [[CL]] 185ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[IX:%.*]] = getelementptr inbounds i32** [[T]], i32 0 186ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[TH:%.*]] = load i32** [[IX]], align 4 187ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[F:%.*]] = mul nsw i32 1, [[Z]] 188ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[IX1:%.*]] = getelementptr inbounds i32* [[TH]], i32 [[F]] 189ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: [[IX2:%.*]] = getelementptr inbounds i32* [[IX1]], i32 5 190ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian // CHECK-NEXT: store i32 0, i32* [[IX2]], align 4 191ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian} 192ec22f56f2031c3e61100d42133b06f9b9f020ee6Fariborz Jahanian 193f5bf912767ba19832bba7694fc679a5ec3c055ffEli Friedman// Follow gcc's behavior for VLAs in parameter lists. PR9559. 194f5bf912767ba19832bba7694fc679a5ec3c055ffEli Friedmanvoid test7(int a[b(0)]) { 19593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define void @test7( 196f5bf912767ba19832bba7694fc679a5ec3c055ffEli Friedman // CHECK: call i32 @b(i8* null) 197f5bf912767ba19832bba7694fc679a5ec3c055ffEli Friedman} 198