| // REQUIRES: aarch64-registered-target |
| |
| // RUN: %clang -fsanitize-trap=undefined -fsanitize=hwaddress,array-bounds -target aarch64-linux-gnu -S -emit-llvm -mllvm -hwasan-use-stack-safety=true -mllvm -hwasan-generate-tags-with-calls -O2 %s -o - | FileCheck %s --check-prefixes=CHECK,SAFETY |
| // RUN: %clang -fsanitize-trap=undefined -fsanitize=hwaddress,array-bounds -target aarch64-linux-gnu -S -emit-llvm -mllvm -hwasan-use-stack-safety=false -mllvm -hwasan-generate-tags-with-calls -O2 %s -o - | FileCheck %s --check-prefixes=CHECK,NOSAFETY |
| |
| // Make sure that HWAsan does not re-check what has been validated by array-bounds |
| |
| void f(char*); |
| |
| int foo(unsigned int idx) { |
| char buf[10]; |
| f(buf); |
| return buf[idx]; |
| // CHECK-LABEL: {{.*}}foo |
| // NOSAFETY: call void @llvm.hwasan.check.memaccess.shortgranules |
| // SAFETY-NOT: call void @llvm.hwasan.check.memaccess.shortgranules |
| } |
| |
| int bar(int idx) { |
| char buf[10]; |
| f(buf); |
| return buf[idx]; |
| // CHECK-LABEL: {{.*}}bar |
| // NOSAFETY: call void @llvm.hwasan.check.memaccess.shortgranules |
| // SAFETY-NOT: call void @llvm.hwasan.check.memaccess.shortgranules |
| } |