blob: 8011497bf57d56a94aadcba0b3c72a96367d06e4 [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
55void function(short width, int data[][width]) {}
56
57void test() {
58 // CHECK: call void @function(i16 signext 1, i32* null)
59 function(1, 0);
60}
61