[clang] [clang-tools-extra] [llvm] [WebAssembly][Sanitizer] WebAssembly Memory Tagging (PR #162972)

via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 10 21:56:19 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions inc,cpp,h -- llvm/lib/Target/WebAssembly/WebAssemblyGlobalsTagging.cpp llvm/lib/Target/WebAssembly/WebAssemblyStackTagging.cpp clang/lib/CodeGen/TargetBuiltins/WebAssembly.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp compiler-rt/lib/builtins/fp_compare_impl.inc lldb/source/Host/android/HostInfoAndroid.cpp llvm/include/llvm/TargetParser/Triple.h llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp llvm/lib/MC/MCWasmStreamer.cpp llvm/lib/Target/WebAssembly/WebAssembly.h llvm/lib/Target/WebAssembly/WebAssemblySubtarget.h llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp mlir/lib/ExecutionEngine/CRunnerUtils.cpp
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/CodeGen/TargetBuiltins/WebAssembly.cpp b/clang/lib/CodeGen/TargetBuiltins/WebAssembly.cpp
index e490391e5..8d74104f1 100644
--- a/clang/lib/CodeGen/TargetBuiltins/WebAssembly.cpp
+++ b/clang/lib/CodeGen/TargetBuiltins/WebAssembly.cpp
@@ -674,34 +674,34 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
   case WebAssembly::BI__builtin_wasm_memtag_status: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_status,
-      {ConvertType(E->getType())});
+                                        {ConvertType(E->getType())});
     return Builder.CreateCall(Callee, {Index});
   }
   case WebAssembly::BI__builtin_wasm_memtag_tagbits: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_tagbits,
-      {ConvertType(E->getType())});
+                                        {ConvertType(E->getType())});
     return Builder.CreateCall(Callee, {Index});
   }
   case WebAssembly::BI__builtin_wasm_memtag_startbit: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_startbit,
-      {ConvertType(E->getType())});
+                                        {ConvertType(E->getType())});
     return Builder.CreateCall(Callee, {Index});
   }
   case WebAssembly::BI__builtin_wasm_memtag_extract: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_extract,
-      {ConvertType(E->getType())});
+                                        {ConvertType(E->getType())});
     return Builder.CreateCall(Callee, {Index, Ptr});
   }
   case WebAssembly::BI__builtin_wasm_memtag_insert: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *Newtag = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_insert,
-      {Newtag->getType()});
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_insert, {Newtag->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, Newtag});
   }
   case WebAssembly::BI__builtin_wasm_memtag_copy: {
@@ -712,7 +712,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     return Builder.CreateCall(Callee, {Index, Ptr0, Ptr1});
   }
   case WebAssembly::BI__builtin_wasm_memtag_sub: {
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_sub, ConvertType(E->getType()));
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_sub, ConvertType(E->getType()));
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr0 = EmitScalarExpr(E->getArg(1));
     Value *Ptr1 = EmitScalarExpr(E->getArg(2));
@@ -728,14 +729,16 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_store, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_store, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_storez: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_storez, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_storez, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_untag: {
@@ -748,14 +751,16 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_untagstore, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_untagstore, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_untagstorez: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_untagstorez, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_untagstorez, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_random: {
@@ -768,21 +773,24 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstore, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstore, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_randomstorez: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstorez, B16->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstorez, B16->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, B16});
   }
   case WebAssembly::BI__builtin_wasm_memtag_randommask: {
     Value *Index = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *Mask = EmitScalarExpr(E->getArg(2));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_random, Mask->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_random, Mask->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, Mask});
   }
   case WebAssembly::BI__builtin_wasm_memtag_randommaskstore: {
@@ -791,7 +799,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *B16 = EmitScalarExpr(E->getArg(2));
     Value *Mask = EmitScalarExpr(E->getArg(3));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstore,
-      {B16->getType(), Mask->getType()});
+                                        {B16->getType(), Mask->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, Mask});
   }
   case WebAssembly::BI__builtin_wasm_memtag_randommaskstorez: {
@@ -799,8 +807,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *B16 = EmitScalarExpr(E->getArg(2));
     Value *Mask = EmitScalarExpr(E->getArg(3));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstorez, 
-      {B16->getType(), Mask->getType()});
+    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_randomstorez,
+                                        {B16->getType(), Mask->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, Mask});
   }
   case WebAssembly::BI__builtin_wasm_memtag_add: {
@@ -808,7 +816,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *PtrOffset = EmitScalarExpr(E->getArg(2));
     Value *TagOffset = EmitScalarExpr(E->getArg(3));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_add, TagOffset->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_add, TagOffset->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, PtrOffset, TagOffset});
   }
   case WebAssembly::BI__builtin_wasm_memtag_addstore: {
@@ -818,7 +827,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *PtrOffset = EmitScalarExpr(E->getArg(3));
     Value *TagOffset = EmitScalarExpr(E->getArg(4));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_addstore,
-      {B16->getType(), TagOffset->getType()});
+                                        {B16->getType(), TagOffset->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, PtrOffset, TagOffset});
   }
   case WebAssembly::BI__builtin_wasm_memtag_addstorez: {
@@ -828,7 +837,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *PtrOffset = EmitScalarExpr(E->getArg(3));
     Value *TagOffset = EmitScalarExpr(E->getArg(4));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_addstorez,
-      {B16->getType(), TagOffset->getType()});
+                                        {B16->getType(), TagOffset->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, PtrOffset, TagOffset});
   }
   case WebAssembly::BI__builtin_wasm_memtag_hint: {
@@ -836,7 +845,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *Ptr = EmitScalarExpr(E->getArg(1));
     Value *HintPtr = EmitScalarExpr(E->getArg(2));
     Value *HintIdx = EmitScalarExpr(E->getArg(3));
-    Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_hint, HintIdx->getType());
+    Function *Callee =
+        CGM.getIntrinsic(Intrinsic::wasm_memtag_hint, HintIdx->getType());
     return Builder.CreateCall(Callee, {Index, Ptr, HintPtr, HintIdx});
   }
   case WebAssembly::BI__builtin_wasm_memtag_hintstore: {
@@ -846,7 +856,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *HintPtr = EmitScalarExpr(E->getArg(3));
     Value *HintIdx = EmitScalarExpr(E->getArg(4));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_hintstore,
-      {B16->getType(), HintIdx->getType()});
+                                        {B16->getType(), HintIdx->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, HintPtr, HintIdx});
   }
   case WebAssembly::BI__builtin_wasm_memtag_hintstorez: {
@@ -856,7 +866,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
     Value *HintPtr = EmitScalarExpr(E->getArg(3));
     Value *HintIdx = EmitScalarExpr(E->getArg(4));
     Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_memtag_hintstorez,
-      {B16->getType(), HintIdx->getType()});
+                                        {B16->getType(), HintIdx->getType()});
     return Builder.CreateCall(Callee, {Index, Ptr, B16, HintPtr, HintIdx});
   }
   default:
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index fe23ae76d..28d2098ae 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -1577,8 +1577,7 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
         << "-fvisibility=";
   }
 
-  if (Sanitizers.has(SanitizerKind::MemtagStack) &&
-      !TC.getTriple().isWasm() &&
+  if (Sanitizers.has(SanitizerKind::MemtagStack) && !TC.getTriple().isWasm() &&
       !hasTargetFeatureMTE(CmdArgs))
     TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);
 }
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 2abdcd45e..0c07670ef 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1753,17 +1753,14 @@ bool tools::addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args,
 
   if (SanArgs.hasMemTag()) {
     if (TC.getTriple().isWasm()) {
-    }
-    else if (TC.getTriple().isAndroid()) {
-      CmdArgs.push_back(
-          Args.MakeArgString("--android-memtag-mode=" + SanArgs.getMemtagMode()));
+    } else if (TC.getTriple().isAndroid()) {
+      CmdArgs.push_back(Args.MakeArgString("--android-memtag-mode=" +
+                                           SanArgs.getMemtagMode()));
       if (SanArgs.hasMemtagHeap())
         CmdArgs.push_back("--android-memtag-heap");
       if (SanArgs.hasMemtagStack())
         CmdArgs.push_back("--android-memtag-stack");
-    }
-    else
-    {
+    } else {
       TC.getDriver().Diag(diag::err_drv_unsupported_opt_for_target)
           << "-fsanitize=memtag*" << TC.getTriple().str();
     }
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 9dc48e46a..b3510a49c 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -783,8 +783,7 @@ void AsmPrinter::emitGlobalVariable(const GlobalVariable *GV) {
 
     if (T.isWasm()) {
       supportMemtagGlobals = true;
-    }
-    else if (arch == Triple::aarch64) {
+    } else if (arch == Triple::aarch64) {
       supportMemtagGlobals = true;
     }
 
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyGlobalsTagging.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyGlobalsTagging.cpp
index 01da537c9..6f878aaf2 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyGlobalsTagging.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyGlobalsTagging.cpp
@@ -1,4 +1,5 @@
-//===- WebAssemblyGlobalsTagging.cpp - Global tagging in IR -------------------===//
+//===- WebAssemblyGlobalsTagging.cpp - Global tagging in IR
+//-------------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -106,7 +107,9 @@ public:
 
   bool runOnModule(Module &M) override;
 
-  StringRef getPassName() const override { return "WebAssembly Globals Tagging"; }
+  StringRef getPassName() const override {
+    return "WebAssembly Globals Tagging";
+  }
 
 private:
   std::set<GlobalVariable *> GlobalsToTag;

``````````

</details>


https://github.com/llvm/llvm-project/pull/162972


More information about the llvm-commits mailing list