<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Evgeniy,<div class=""><br class=""></div><div class="">This commit looks like it broke the lldb bot: <a href="http://green.lab.llvm.org/green/job/lldb-cmake/31011/" class="">http://green.lab.llvm.org/green/job/lldb-cmake/31011/</a></div><div class=""><br class=""></div><div class="">Can you take a look?</div><div class=""><br class=""></div><div class="">Amara</div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Jul 15, 2019, at 1:02 PM, Evgeniy Stepanov via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: eugenis<br class="">Date: Mon Jul 15 13:02:23 2019<br class="">New Revision: 366123<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=366123&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=366123&view=rev</a><br class="">Log:<br class="">ARM MTE stack sanitizer.<br class=""><br class="">Add "memtag" sanitizer that detects and mitigates stack memory issues<br class="">using armv8.5 Memory Tagging Extension.<br class=""><br class="">It is similar in principle to HWASan, which is a software implementation<br class="">of the same idea, but there are enough differencies to warrant a new<br class="">sanitizer type IMHO. It is also expected to have very different<br class="">performance properties.<br class=""><br class="">The new sanitizer does not have a runtime library (it may grow one<br class="">later, along with a "debugging" mode). Similar to SafeStack and<br class="">StackProtector, the instrumentation pass (in a follow up change) will be<br class="">inserted in all cases, but will only affect functions marked with the<br class="">new sanitize_memtag attribute.<br class=""><br class="">Reviewers: pcc, hctim, vitalybuka, ostannard<br class=""><br class="">Subscribers: srhines, mehdi_amini, javed.absar, kristof.beyls, hiraditya, cryptoad, steven_wu, dexonsmith, cfe-commits, llvm-commits<br class=""><br class="">Tags: #clang, #llvm<br class=""><br class="">Differential Revision: <a href="https://reviews.llvm.org/D64169" class="">https://reviews.llvm.org/D64169</a><br class=""><br class="">Added:<br class="">    cfe/trunk/test/CodeGen/memtag-attr.cpp<br class="">    cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp<br class="">Modified:<br class="">    cfe/trunk/include/clang/Basic/Features.def<br class="">    cfe/trunk/include/clang/Basic/Sanitizers.def<br class="">    cfe/trunk/lib/CodeGen/CGDeclCXX.cpp<br class="">    cfe/trunk/lib/CodeGen/CodeGenFunction.cpp<br class="">    cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br class="">    cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp<br class="">    cfe/trunk/lib/Driver/SanitizerArgs.cpp<br class="">    cfe/trunk/lib/Driver/ToolChains/Linux.cpp<br class="">    cfe/trunk/test/Driver/fsanitize.c<br class="">    cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp<br class=""><br class="">Modified: cfe/trunk/include/clang/Basic/Features.def<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Features.def?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Features.def?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/include/clang/Basic/Features.def (original)<br class="">+++ cfe/trunk/include/clang/Basic/Features.def Mon Jul 15 13:02:23 2019<br class="">@@ -42,6 +42,7 @@ FEATURE(address_sanitizer,<br class=""> FEATURE(hwaddress_sanitizer,<br class="">         LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress |<br class="">                                    SanitizerKind::KernelHWAddress))<br class="">+FEATURE(memtag_sanitizer, LangOpts.Sanitize.has(SanitizerKind::MemTag))<br class=""> FEATURE(xray_instrument, LangOpts.XRayInstrument)<br class=""> FEATURE(undefined_behavior_sanitizer,<br class="">         LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined))<br class=""><br class="">Modified: cfe/trunk/include/clang/Basic/Sanitizers.def<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Sanitizers.def?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Sanitizers.def?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/include/clang/Basic/Sanitizers.def (original)<br class="">+++ cfe/trunk/include/clang/Basic/Sanitizers.def Mon Jul 15 13:02:23 2019<br class="">@@ -55,6 +55,9 @@ SANITIZER("hwaddress", HWAddress)<br class=""> // Kernel Hardware-assisted AddressSanitizer (KHWASan)<br class=""> SANITIZER("kernel-hwaddress", KernelHWAddress)<br class=""><br class="">+// A variant of AddressSanitizer using AArch64 MTE extension.<br class="">+SANITIZER("memtag", MemTag)<br class="">+<br class=""> // MemorySanitizer<br class=""> SANITIZER("memory", Memory)<br class=""><br class=""><br class="">Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original)<br class="">+++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -369,6 +369,10 @@ llvm::Function *CodeGenModule::CreateGlo<br class="">       !isInSanitizerBlacklist(SanitizerKind::KernelHWAddress, Fn, Loc))<br class="">     Fn->addFnAttr(llvm::Attribute::SanitizeHWAddress);<br class=""><br class="">+  if (getLangOpts().Sanitize.has(SanitizerKind::MemTag) &&<br class="">+      !isInSanitizerBlacklist(SanitizerKind::MemTag, Fn, Loc))<br class="">+    Fn->addFnAttr(llvm::Attribute::SanitizeMemTag);<br class="">+<br class="">   if (getLangOpts().Sanitize.has(SanitizerKind::Thread) &&<br class="">       !isInSanitizerBlacklist(SanitizerKind::Thread, Fn, Loc))<br class="">     Fn->addFnAttr(llvm::Attribute::SanitizeThread);<br class=""><br class="">Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)<br class="">+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -696,6 +696,8 @@ void CodeGenFunction::StartFunction(Glob<br class="">     Fn->addFnAttr(llvm::Attribute::SanitizeAddress);<br class="">   if (SanOpts.hasOneOf(SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress))<br class="">     Fn->addFnAttr(llvm::Attribute::SanitizeHWAddress);<br class="">+  if (SanOpts.has(SanitizerKind::MemTag))<br class="">+    Fn->addFnAttr(llvm::Attribute::SanitizeMemTag);<br class="">   if (SanOpts.has(SanitizerKind::Thread))<br class="">     Fn->addFnAttr(llvm::Attribute::SanitizeThread);<br class="">   if (SanOpts.hasOneOf(SanitizerKind::Memory | SanitizerKind::KernelMemory))<br class=""><br class="">Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)<br class="">+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -2239,9 +2239,11 @@ bool CodeGenModule::isInSanitizerBlackli<br class="">                                            SourceLocation Loc, QualType Ty,<br class="">                                            StringRef Category) const {<br class="">   // For now globals can be blacklisted only in ASan and KASan.<br class="">-  const SanitizerMask EnabledAsanMask = LangOpts.Sanitize.Mask &<br class="">+  const SanitizerMask EnabledAsanMask =<br class="">+      LangOpts.Sanitize.Mask &<br class="">       (SanitizerKind::Address | SanitizerKind::KernelAddress |<br class="">-       SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress);<br class="">+       SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress |<br class="">+       SanitizerKind::MemTag);<br class="">   if (!EnabledAsanMask)<br class="">     return false;<br class="">   const auto &SanitizerBL = getContext().getSanitizerBlacklist();<br class=""><br class="">Modified: cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp (original)<br class="">+++ cfe/trunk/lib/CodeGen/SanitizerMetadata.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -20,14 +20,17 @@ using namespace CodeGen;<br class=""><br class=""> SanitizerMetadata::SanitizerMetadata(CodeGenModule &CGM) : CGM(CGM) {}<br class=""><br class="">+static bool isAsanHwasanOrMemTag(const SanitizerSet& SS) {<br class="">+  return SS.hasOneOf(SanitizerKind::Address | SanitizerKind::KernelAddress |<br class="">+                     SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress |<br class="">+                     SanitizerKind::MemTag);<br class="">+}<br class="">+<br class=""> void SanitizerMetadata::reportGlobalToASan(llvm::GlobalVariable *GV,<br class="">                                            SourceLocation Loc, StringRef Name,<br class="">                                            QualType Ty, bool IsDynInit,<br class="">                                            bool IsBlacklisted) {<br class="">-  if (!CGM.getLangOpts().Sanitize.hasOneOf(SanitizerKind::Address |<br class="">-                                           SanitizerKind::KernelAddress |<br class="">-                                           SanitizerKind::HWAddress |<br class="">-                                           SanitizerKind::KernelHWAddress))<br class="">+  if (!isAsanHwasanOrMemTag(CGM.getLangOpts().Sanitize))<br class="">     return;<br class="">   IsDynInit &= !CGM.isInSanitizerBlacklist(GV, Loc, Ty, "init");<br class="">   IsBlacklisted |= CGM.isInSanitizerBlacklist(GV, Loc, Ty);<br class="">@@ -58,10 +61,7 @@ void SanitizerMetadata::reportGlobalToAS<br class=""><br class=""> void SanitizerMetadata::reportGlobalToASan(llvm::GlobalVariable *GV,<br class="">                                            const VarDecl &D, bool IsDynInit) {<br class="">-  if (!CGM.getLangOpts().Sanitize.hasOneOf(SanitizerKind::Address |<br class="">-                                           SanitizerKind::KernelAddress |<br class="">-                                           SanitizerKind::HWAddress |<br class="">-                                           SanitizerKind::KernelHWAddress))<br class="">+  if (!isAsanHwasanOrMemTag(CGM.getLangOpts().Sanitize))<br class="">     return;<br class="">   std::string QualName;<br class="">   llvm::raw_string_ostream OS(QualName);<br class="">@@ -78,10 +78,7 @@ void SanitizerMetadata::reportGlobalToAS<br class=""> void SanitizerMetadata::disableSanitizerForGlobal(llvm::GlobalVariable *GV) {<br class="">   // For now, just make sure the global is not modified by the ASan<br class="">   // instrumentation.<br class="">-  if (CGM.getLangOpts().Sanitize.hasOneOf(SanitizerKind::Address |<br class="">-                                          SanitizerKind::KernelAddress |<br class="">-                                          SanitizerKind::HWAddress |<br class="">-                                          SanitizerKind::KernelHWAddress))<br class="">+  if (isAsanHwasanOrMemTag(CGM.getLangOpts().Sanitize))<br class="">     reportGlobalToASan(GV, SourceLocation(), "", QualType(), false, true);<br class=""> }<br class=""><br class=""><br class="">Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original)<br class="">+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -40,7 +40,8 @@ static const SanitizerMask NeedsUnwindTa<br class=""> static const SanitizerMask SupportsCoverage =<br class="">     SanitizerKind::Address | SanitizerKind::HWAddress |<br class="">     SanitizerKind::KernelAddress | SanitizerKind::KernelHWAddress |<br class="">-    SanitizerKind::Memory | SanitizerKind::KernelMemory | SanitizerKind::Leak |<br class="">+    SanitizerKind::MemTag | SanitizerKind::Memory |<br class="">+    SanitizerKind::KernelMemory | SanitizerKind::Leak |<br class="">     SanitizerKind::Undefined | SanitizerKind::Integer |<br class="">     SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |<br class="">     SanitizerKind::DataFlow | SanitizerKind::Fuzzer |<br class="">@@ -122,6 +123,7 @@ static void addDefaultBlacklists(const D<br class="">     SanitizerMask Mask;<br class="">   } Blacklists[] = {{"asan_blacklist.txt", SanitizerKind::Address},<br class="">                     {"hwasan_blacklist.txt", SanitizerKind::HWAddress},<br class="">+                    {"memtag_blacklist.txt", SanitizerKind::MemTag},<br class="">                     {"msan_blacklist.txt", SanitizerKind::Memory},<br class="">                     {"tsan_blacklist.txt", SanitizerKind::Thread},<br class="">                     {"dfsan_abilist.txt", SanitizerKind::DataFlow},<br class="">@@ -420,7 +422,11 @@ SanitizerArgs::SanitizerArgs(const ToolC<br class="">                      SanitizerKind::Address | SanitizerKind::HWAddress |<br class="">                          SanitizerKind::Leak | SanitizerKind::Thread |<br class="">                          SanitizerKind::Memory | SanitizerKind::KernelAddress |<br class="">-                         SanitizerKind::Scudo | SanitizerKind::SafeStack)};<br class="">+                         SanitizerKind::Scudo | SanitizerKind::SafeStack),<br class="">+      std::make_pair(SanitizerKind::MemTag,<br class="">+                     SanitizerKind::Address | SanitizerKind::KernelAddress |<br class="">+                         SanitizerKind::HWAddress |<br class="">+                         SanitizerKind::KernelHWAddress)};<br class="">   // Enable toolchain specific default sanitizers if not explicitly disabled.<br class="">   SanitizerMask Default = TC.getDefaultSanitizers() & ~AllRemove;<br class=""><br class=""><br class="">Modified: cfe/trunk/lib/Driver/ToolChains/Linux.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Linux.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Linux.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/lib/Driver/ToolChains/Linux.cpp (original)<br class="">+++ cfe/trunk/lib/Driver/ToolChains/Linux.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -1026,6 +1026,8 @@ SanitizerMask Linux::getSupportedSanitiz<br class="">     Res |= SanitizerKind::HWAddress;<br class="">     Res |= SanitizerKind::KernelHWAddress;<br class="">   }<br class="">+  if (IsAArch64)<br class="">+    Res |= SanitizerKind::MemTag;<br class="">   return Res;<br class=""> }<br class=""><br class=""><br class="">Added: cfe/trunk/test/CodeGen/memtag-attr.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/memtag-attr.cpp?rev=366123&view=auto" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/memtag-attr.cpp?rev=366123&view=auto</a><br class="">==============================================================================<br class="">--- cfe/trunk/test/CodeGen/memtag-attr.cpp (added)<br class="">+++ cfe/trunk/test/CodeGen/memtag-attr.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -0,0 +1,19 @@<br class="">+// Make sure the sanitize_memtag attribute is emitted when using MemTag sanitizer.<br class="">+// Make sure __attribute__((no_sanitize("memtag")) disables instrumentation.<br class="">+<br class="">+// RUN: %clang_cc1 -triple aarch64-unknown-linux -disable-O0-optnone \<br class="">+// RUN:   -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-NO %s<br class="">+<br class="">+// RUN: %clang_cc1 -triple aarch64-unknown-linux -fsanitize=memtag \<br class="">+// RUN:   -disable-O0-optnone -emit-llvm -o - %s | \<br class="">+// RUN:   FileCheck -check-prefix=CHECK-MEMTAG %s<br class="">+<br class="">+int HasSanitizeMemTag() { return 1; }<br class="">+// CHECK-NO: {{Function Attrs: noinline nounwind$}}<br class="">+// CHECK-MEMTAG: Function Attrs: noinline nounwind sanitize_memtag<br class="">+<br class="">+__attribute__((no_sanitize("memtag"))) int NoSanitizeQuoteAddress() {<br class="">+  return 0;<br class="">+}<br class="">+// CHECK-NO: {{Function Attrs: noinline nounwind$}}<br class="">+// CHECK-MEMTAG: {{Function Attrs: noinline nounwind$}}<br class=""><br class="">Modified: cfe/trunk/test/Driver/fsanitize.c<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fsanitize.c?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fsanitize.c?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/test/Driver/fsanitize.c (original)<br class="">+++ cfe/trunk/test/Driver/fsanitize.c Mon Jul 15 13:02:23 2019<br class="">@@ -181,6 +181,16 @@<br class=""> // RUN: %clang -target x86_64-linux-gnu -fsanitize=hwaddress,address -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANHA-SANA<br class=""> // CHECK-SANHA-SANA: '-fsanitize=hwaddress' not allowed with '-fsanitize=address'<br class=""><br class="">+// RUN: %clang -target aarch64-linux-android -fsanitize=memtag,address -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-SANA<br class="">+// CHECK-SANMT-SANA: '-fsanitize=memtag' not allowed with '-fsanitize=address'<br class="">+<br class="">+// RUN: %clang -target aarch64-linux-android -fsanitize=memtag,hwaddress -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-SANHA<br class="">+// CHECK-SANMT-SANHA: '-fsanitize=memtag' not allowed with '-fsanitize=hwaddress'<br class="">+<br class="">+// RUN: %clang -target i386-linux-android -fsanitize=memtag -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-BAD-ARCH<br class="">+// RUN: %clang -target x86_64-linux-android -fsanitize=memtag -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-BAD-ARCH<br class="">+// CHECK-SANMT-BAD-ARCH: unsupported option '-fsanitize=memtag' for target<br class="">+<br class=""> // RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize-address-use-after-scope %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-SCOPE<br class=""> // RUN: %clang_cl --target=x86_64-windows -fsanitize=address -fsanitize-address-use-after-scope -### -- %s 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-SCOPE<br class=""> // CHECK-USE-AFTER-SCOPE: -cc1{{.*}}-fsanitize-address-use-after-scope<br class=""><br class="">Added: cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp?rev=366123&view=auto" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp?rev=366123&view=auto</a><br class="">==============================================================================<br class="">--- cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp (added)<br class="">+++ cfe/trunk/test/Lexer/has_feature_memtag_sanitizer.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -0,0 +1,11 @@<br class="">+// RUN: %clang_cc1 -E -fsanitize=memtag %s -o - | FileCheck --check-prefix=CHECK-MEMTAG %s<br class="">+// RUN: %clang_cc1 -E  %s -o - | FileCheck --check-prefix=CHECK-NO-MEMTAG %s<br class="">+<br class="">+#if __has_feature(memtag_sanitizer)<br class="">+int MemTagSanitizerEnabled();<br class="">+#else<br class="">+int MemTagSanitizerDisabled();<br class="">+#endif<br class="">+<br class="">+// CHECK-MEMTAG: MemTagSanitizerEnabled<br class="">+// CHECK-NO-MEMTAG: MemTagSanitizerDisabled<br class=""><br class="">Modified: cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp?rev=366123&r1=366122&r2=366123&view=diff" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp?rev=366123&r1=366122&r2=366123&view=diff</a><br class="">==============================================================================<br class="">--- cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp (original)<br class="">+++ cfe/trunk/test/SemaCXX/attr-no-sanitize.cpp Mon Jul 15 13:02:23 2019<br class="">@@ -30,3 +30,8 @@ int f5() __attribute__((no_sanitize("add<br class=""> // DUMP: NoSanitizeAttr {{.*}} unknown<br class=""> // PRINT: int f6() __attribute__((no_sanitize("unknown")))<br class=""> int f6() __attribute__((no_sanitize("unknown"))); // expected-warning{{unknown sanitizer 'unknown' ignored}}<br class="">+<br class="">+// DUMP-LABEL: FunctionDecl {{.*}} f7<br class="">+// DUMP: NoSanitizeAttr {{.*}} memtag<br class="">+// PRINT: int f7() {{\[\[}}clang::no_sanitize("memtag")]]<br class="">+[[clang::no_sanitize("memtag")]] int f7();<br class=""><br class=""><br class="">_______________________________________________<br class="">cfe-commits mailing list<br class=""><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>