Argyrios Kyrtzidis | 9efa1ce | 2010-09-14 00:42:34 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s |
Eli Friedman | f408470 | 2008-12-20 23:11:59 +0000 | [diff] [blame] | 2 | |
| 3 | int b(char* x); |
| 4 | |
| 5 | // Extremely basic VLA test |
| 6 | void a(int x) { |
| 7 | char arry[x]; |
| 8 | arry[0] = 10; |
| 9 | b(arry); |
| 10 | } |
Anders Carlsson | 76dbc04 | 2008-12-21 03:33:21 +0000 | [diff] [blame] | 11 | |
Anders Carlsson | 118467d | 2008-12-21 03:40:32 +0000 | [diff] [blame] | 12 | int c(int n) |
Anders Carlsson | 76dbc04 | 2008-12-21 03:33:21 +0000 | [diff] [blame] | 13 | { |
Anders Carlsson | 118467d | 2008-12-21 03:40:32 +0000 | [diff] [blame] | 14 | return sizeof(int[n]); |
Anders Carlsson | 76dbc04 | 2008-12-21 03:33:21 +0000 | [diff] [blame] | 15 | } |
Anders Carlsson | d19fd0d | 2009-02-09 21:48:07 +0000 | [diff] [blame] | 16 | |
| 17 | int f0(int x) { |
| 18 | int vla[x]; |
| 19 | return vla[x-1]; |
| 20 | } |
Anders Carlsson | 7ccf3e4 | 2009-02-10 22:50:24 +0000 | [diff] [blame] | 21 | |
| 22 | void |
| 23 | f(int count) |
| 24 | { |
| 25 | int a[count]; |
| 26 | |
| 27 | do { } while (0); |
| 28 | |
| 29 | if (a[0] != 3) { |
| 30 | } |
| 31 | } |
Eli Friedman | 9444638 | 2009-05-29 19:23:46 +0000 | [diff] [blame] | 32 | |
| 33 | void 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 Kyrtzidis | 9efa1ce | 2010-09-14 00:42:34 +0000 | [diff] [blame] | 38 | |
| 39 | // rdar://8403108 |
| 40 | // CHECK: define void @f_8403108 |
| 41 | void 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 Jahanian | 521c72c | 2010-09-21 22:53:33 +0000 | [diff] [blame^] | 53 | |
| 54 | // pr7827 |
| 55 | void function(short width, int data[][width]) {} |
| 56 | |
| 57 | void test() { |
| 58 | // CHECK: call void @function(i16 signext 1, i32* null) |
| 59 | function(1, 0); |
| 60 | } |
| 61 | |