| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c23 -emit-llvm -o - %s | FileCheck %s |
| struct S { |
| int s; |
| int e; |
| }; |
| |
| static constexpr struct S V = { |
| .s = 9, |
| .e = (1ULL << V.s), |
| }; |
| |
| extern void f(int *); |
| |
| // CHECK-LABEL: define{{.*}} void @t1() |
| // CHECK: %arr = alloca [10 x i32], align 16 |
| void t1(void) { |
| int arr[10]; |
| f(arr); |
| } |
| |
| // CHECK-LABEL: define{{.*}} void @t2() |
| // CHECK: %arr = alloca [512 x i32], align 16 |
| void t2(void) { |
| int arr[V.e]; |
| f(arr); |
| } |
| |
| // CHECK-LABEL: define{{.*}} void @t3( |
| // CHECK: %saved_stack = alloca ptr |
| // CHECK: %vla = alloca i32, i64 |
| void t3(int n) { |
| int arr[n]; |
| f(arr); |
| } |