Since C++11, the C++ standard has a forward progress guarantee [intro.progress], so all such functions must have the `mustprogress` requirement. In addition, from C11 and onwards, loops without a non-zero constant conditional or no conditional are also required to make progress (C11 6.8.5p6). This patch implements these attribute deductions so they can be used by the optimization passes. Differential Revision: https://reviews.llvm.org/D86841
76 lines
3.9 KiB
C++
76 lines
3.9 KiB
C++
// Make sure the sanitize_address attribute is emitted when using ASan, KASan or
|
|
// HWASan. Either __attribute__((no_sanitize("address")) or
|
|
// __attribute__((no_sanitize("kernel-address")) disables both ASan and KASan
|
|
// instrumentation.
|
|
// Same for __attribute__((no_sanitize("hwaddress")) and
|
|
// __attribute__((no_sanitize("kernel-hwddress")) and HWASan and KHWASan.
|
|
|
|
// RUN: %clang_cc1 -triple i386-unknown-linux -disable-O0-optnone \
|
|
// RUN: -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-NOASAN %s
|
|
|
|
// RUN: %clang_cc1 -triple i386-unknown-linux -fsanitize=address \
|
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | \
|
|
// RUN: FileCheck -check-prefix=CHECK-ASAN %s
|
|
|
|
// RUN: %clang_cc1 -triple i386-unknown-linux -fsanitize=kernel-address \
|
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | \
|
|
// RUN: FileCheck -check-prefix=CHECK-KASAN %s
|
|
|
|
// RUN: %clang_cc1 -triple i386-unknown-linux -fsanitize=hwaddress \
|
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | \
|
|
// RUN: FileCheck -check-prefix=CHECK-HWASAN %s
|
|
|
|
// RUN: %clang_cc1 -triple i386-unknown-linux -fsanitize=kernel-hwaddress \
|
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | \
|
|
// RUN: FileCheck -check-prefix=CHECK-KHWASAN %s
|
|
|
|
int HasSanitizeAddress() { return 1; }
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: Function Attrs: noinline nounwind sanitize_address mustprogress
|
|
// CHECK-KASAN: Function Attrs: noinline nounwind sanitize_address mustprogress
|
|
// CHECK-HWASAN: Function Attrs: noinline nounwind sanitize_hwaddress mustprogress
|
|
// CHECK-KHWASAN: Function Attrs: noinline nounwind sanitize_hwaddress mustprogress
|
|
|
|
__attribute__((no_sanitize("address"))) int NoSanitizeQuoteAddress() {
|
|
return 0;
|
|
}
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
|
|
__attribute__((no_sanitize_address)) int NoSanitizeAddress() { return 0; }
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
|
|
__attribute__((no_sanitize("kernel-address"))) int NoSanitizeKernelAddress() {
|
|
return 0;
|
|
}
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}}
|
|
|
|
__attribute__((no_sanitize("hwaddress"))) int NoSanitizeHWAddress() {
|
|
return 0;
|
|
}
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}}
|
|
// CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}}
|
|
// CHECK-HWASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-KHWASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
|
|
__attribute__((no_sanitize("kernel-hwaddress"))) int NoSanitizeKernelHWAddress() {
|
|
return 0;
|
|
}
|
|
// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}}
|
|
// CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}}
|
|
// CHECK-HWASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|
|
// CHECK-KHWASAN: {{Function Attrs: noinline nounwind mustprogress$}}
|