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