1 // RUN: %clang --target=aarch64 -march=armv8+memtag -fsanitize=memtag-stack -mllvm -stack-safety-print=1 %s -S -o - 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFETY
2 // RUN: %clang -O1 --target=aarch64 -march=armv8+memtag -fsanitize=memtag-stack -mllvm -stack-safety-print=1 %s -S -o - 2>&1 | FileCheck %s --check-prefix=CHECK-SAFETY
3 // RUN: %clang -O2 --target=aarch64 -march=armv8+memtag -fsanitize=memtag-stack -mllvm -stack-safety-print=1 %s -S -o - 2>&1 | FileCheck %s --check-prefix=CHECK-SAFETY
4 // RUN: %clang -O3 --target=aarch64 -march=armv8+memtag -fsanitize=memtag-stack -mllvm -stack-safety-print=1 %s -S -o - 2>&1 | FileCheck %s --check-prefix=CHECK-SAFETY
5
6 // REQUIRES: aarch64-registered-target
7
8 int z;
use(int * p)9 __attribute__((noinline)) void use(int *p) { *p = z; }
foo()10 int foo() {
11 int x;
12 use(&x);
13 return x;
14 }
15
16 // CHECK-NO-SAFETY-NOT: allocas uses
17
18 // CHECK-SAFETY-LABEL: @foo
19 // CHECK-SAFETY-LABEL: allocas uses:
20 // CHECK-SAFETY-NEXT: [4]: [0,4)
21