xref: /llvm-project/clang/test/C/C23/n2927_2.c (revision 50c81128de8616117118564eff22cf508cba7848)
1 // RUN: %clang_cc1 -emit-llvm -o - -std=c2x %s | FileCheck %s
2 
3 // C2x 6.7.2.5 EXAMPLE 5
vla_size(int n)4 unsigned long long vla_size(int n) {
5 // CHECK: vla_size
6 
7   return sizeof(
8     typeof_unqual(char[n + 3])
9   ); // execution-time sizeof, translation-time typeof operation
10 // CHECK: [[N_ADDR:%.*]] = alloca i32
11 // CHECK: store i32 {{%.*}} ptr [[N_ADDR]]
12 // CHECK: [[N:%.*]] = load i32, ptr [[N_ADDR]]
13 // CHECK: [[TEMP:%.*]] = add nsw i32 [[N]], 3
14 // CHECK: [[RET:%.*]] = zext i32 [[TEMP]] to i64
15 // CHECK: ret i64 [[RET]]
16 }
17 
main()18 int main() {
19   return (int)vla_size(10); // vla_size returns 13
20 }
21 
22