1// RUN: %clang_safestack %s -o %t
2// RUN: %run %t
3
4#include "utils.h"
5
6// Test that loads/stores work correctly for VLAs on the unsafe stack.
7
8int main(int argc, char **argv)
9{
10 int i = 128;
11 break_optimization(arg: &i);
12 char buffer[i];
13
14 // check that we can write to a buffer
15 for (i = 0; argv[0][i] && i < sizeof (buffer) - 1; ++i)
16 buffer[i] = argv[0][i];
17 buffer[i] = '\0';
18
19 break_optimization(arg: buffer);
20
21 // check that we can read from a buffer
22 for (i = 0; argv[0][i] && i < sizeof (buffer) - 1; ++i)
23 if (buffer[i] != argv[0][i])
24 return 1;
25 return 0;
26}
27

source code of compiler-rt/test/safestack/buffer-copy-vla.c