| // 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); | |
| } |