llvm-project/clang/test/CodeGen/address-safety-attr-flavors.cpp
Atmn Patel ac73b73c16 [clang] Add mustprogress and llvm.loop.mustprogress attribute deduction
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
2020-11-04 22:03:14 -05:00

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