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