| // Make sure the sanitize_memtag attribute is emitted when using MemTag sanitizer. |
| // Make sure __attribute__((no_sanitize("memtag")) disables instrumentation. |
| |
| // RUN: %clang_cc1 -triple aarch64-unknown-linux -disable-O0-optnone \ |
| // RUN: -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-NO %s |
| |
| // RUN: %clang_cc1 -triple aarch64-unknown-linux -fsanitize=memtag-stack \ |
| // RUN: -disable-O0-optnone -emit-llvm -o - %s | \ |
| // RUN: FileCheck -check-prefix=CHECK-MEMTAG %s |
| |
| // RUN: %clang --target=aarch64-unknown-linux -march=armv8a+memtag \ |
| // RUN: -fsanitize=memtag -disable-O0-optnone -S -emit-llvm -o - %s | \ |
| // RUN: FileCheck -check-prefix=CHECK-MEMTAG %s |
| |
| extern "C" int HasSanitizeMemTag() { return 1; } |
| // CHECK-NO: Function Attrs |
| // CHECK-NO-NOT: sanitize_memtag |
| // CHECK-NO-NEXT: define {{.*}} @HasSanitizeMemTag( |
| // CHECK-MEMTAG: Function Attrs: {{.*}} sanitize_memtag |
| // CHECK-MEMTAG-NEXT: define {{.*}} @HasSanitizeMemTag( |
| |
| extern "C" __attribute__((no_sanitize("memtag"))) int NoSanitizeQuoteAddress() { |
| return 0; |
| } |
| // CHECK-NO: Function Attrs |
| // CHECK-NO-NOT: sanitize_memtag |
| // CHECK-NO-NEXT: define {{.*}} @NoSanitizeQuoteAddress( |
| // CHECK-MEMTAG: Function Attrs |
| // CHECK-MEMTAG-NOT: sanitize_memtag |
| // CHECK-MEMTAG-NEXT: define {{.*}} @NoSanitizeQuoteAddress( |