blob: 06d17b88d346e9d21acf362c13983e3b244d48b9 [file] [log] [blame]
Argyrios Kyrtzidis9efa1ce2010-09-14 00:42:34 +00001// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
Eli Friedmanf4084702008-12-20 23:11:59 +00002
3int b(char* x);
4
5// Extremely basic VLA test
6void a(int x) {
7 char arry[x];
8 arry[0] = 10;
9 b(arry);
10}
Anders Carlsson76dbc042008-12-21 03:33:21 +000011
Anders Carlsson118467d2008-12-21 03:40:32 +000012int c(int n)
Anders Carlsson76dbc042008-12-21 03:33:21 +000013{
Anders Carlsson118467d2008-12-21 03:40:32 +000014 return sizeof(int[n]);
Anders Carlsson76dbc042008-12-21 03:33:21 +000015}
Anders Carlssond19fd0d2009-02-09 21:48:07 +000016
17int f0(int x) {
18 int vla[x];
19 return vla[x-1];
20}
Anders Carlsson7ccf3e42009-02-10 22:50:24 +000021
22void
23f(int count)
24{
25 int a[count];
26
27 do { } while (0);
28
29 if (a[0] != 3) {
30 }
31}
Eli Friedman94446382009-05-29 19:23:46 +000032
33void g(int count) {
34 // Make sure we emit sizes correctly in some obscure cases
35 int (*a[5])[count];
36 int (*b)[][count];
37}
Argyrios Kyrtzidis9efa1ce2010-09-14 00:42:34 +000038
39// rdar://8403108
40// CHECK: define void @f_8403108
41void f_8403108(unsigned x) {
42 // CHECK: call i8* @llvm.stacksave()
43 char s1[x];
44 while (1) {
45 // CHECK: call i8* @llvm.stacksave()
46 char s2[x];
47 if (1)
48 break;
49 // CHECK: call void @llvm.stackrestore(i8*
50 }
51 // CHECK: call void @llvm.stackrestore(i8*
52}
Fariborz Jahanian521c72c2010-09-21 22:53:33 +000053
54// pr7827
Fariborz Jahanian8fb87ae2010-09-24 17:30:16 +000055void function(short width, int data[][width]) {} // expected-note {{passing argument to parameter 'data' here}}
Fariborz Jahanian521c72c2010-09-21 22:53:33 +000056
57void test() {
Fariborz Jahanian8fb87ae2010-09-24 17:30:16 +000058 int bork[4][13];
Fariborz Jahanian521c72c2010-09-21 22:53:33 +000059 // CHECK: call void @function(i16 signext 1, i32* null)
60 function(1, 0);
Fariborz Jahanian8fb87ae2010-09-24 17:30:16 +000061 // CHECK: call void @function(i16 signext 1, i32* inttoptr
62 function(1, 0xbadbeef); // expected-warning {{incompatible integer to pointer conversion passing}}
63 // CHECK: call void @function(i16 signext 1, i32* {{.*}})
64 function(1, bork);
65}
66
67void function1(short width, int data[][width][width]) {}
68void test1() {
69 int bork[4][13][15];
70 // CHECK: call void @function1(i16 signext 1, i32* {{.*}})
71 function1(1, bork);
72 // CHECK: call void @function(i16 signext 1, i32* {{.*}})
73 function(1, bork[2]);
Fariborz Jahanian521c72c2010-09-21 22:53:33 +000074}
75