// 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$}} // CHECK-ASAN: Function Attrs: noinline nounwind sanitize_address // CHECK-KASAN: Function Attrs: noinline nounwind sanitize_address // CHECK-HWASAN: Function Attrs: noinline nounwind sanitize_hwaddress // CHECK-KHWASAN: Function Attrs: noinline nounwind sanitize_hwaddress __attribute__((no_sanitize("address"))) int NoSanitizeQuoteAddress() { return 0; } // CHECK-NOASAN: {{Function Attrs: noinline nounwind$}} // CHECK-ASAN: {{Function Attrs: noinline nounwind$}} // CHECK-KASAN: {{Function Attrs: noinline nounwind$}} // CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} // CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} __attribute__((no_sanitize_address)) int NoSanitizeAddress() { return 0; } // CHECK-NOASAN: {{Function Attrs: noinline nounwind$}} // CHECK-ASAN: {{Function Attrs: noinline nounwind$}} // CHECK-KASAN: {{Function Attrs: noinline nounwind$}} // CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} // CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} __attribute__((no_sanitize("kernel-address"))) int NoSanitizeKernelAddress() { return 0; } // CHECK-NOASAN: {{Function Attrs: noinline nounwind$}} // CHECK-ASAN: {{Function Attrs: noinline nounwind$}} // CHECK-KASAN: {{Function Attrs: noinline nounwind$}} // CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} // CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress$}} __attribute__((no_sanitize("hwaddress"))) int NoSanitizeHWAddress() { return 0; } // CHECK-NOASAN: {{Function Attrs: noinline nounwind$}} // CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address$}} // CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address$}} // CHECK-HWASAN: {{Function Attrs: noinline nounwind$}} // CHECK-KHWASAN: {{Function Attrs: noinline nounwind$}} __attribute__((no_sanitize("kernel-hwaddress"))) int NoSanitizeKernelHWAddress() { return 0; } // CHECK-NOASAN: {{Function Attrs: noinline nounwind$}} // CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address$}} // CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address$}} // CHECK-HWASAN: {{Function Attrs: noinline nounwind$}} // CHECK-KHWASAN: {{Function Attrs: noinline nounwind$}}