[clang] [TargetVersion] Only enable on RISC-V and AArch64 (PR #115991)

via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 12 21:00:22 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Piyou Chen (BeMg)

<details>
<summary>Changes</summary>

Address https://github.com/llvm/llvm-project/issues/115000. 

This patch constrains the target_version feature to work only on RISC-V and AArch64 to prevent crashes in Clang.

---
Full diff: https://github.com/llvm/llvm-project/pull/115991.diff


2 Files Affected:

- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+2) 
- (modified) clang/lib/Sema/SemaDeclAttr.cpp (+5) 


``````````diff
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 509d45c0867590..6170c3c10b00ca 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -3282,6 +3282,8 @@ def warn_unsupported_target_attribute
               "attribute string; '%select{target|target_clones|target_version}3' "
               "attribute ignored">,
       InGroup<IgnoredAttributes>;
+def err_target_version_unsupported
+    : Error<"target_version attribute is not supported in this target">;
 def err_attribute_unsupported
     : Error<"%0 attribute is not supported on targets missing %1;"
             " specify an appropriate -march= or -mcpu=">;
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index d05d326178e1b8..e2eaa00c666fc2 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -3040,6 +3040,11 @@ bool Sema::checkTargetVersionAttr(SourceLocation LiteralLoc, Decl *D,
   enum FirstParam { Unsupported };
   enum SecondParam { None };
   enum ThirdParam { Target, TargetClones, TargetVersion };
+
+  if (!Context.getTargetInfo().getTriple().isRISCV() &&
+      !Context.getTargetInfo().getTriple().isAArch64())
+    return Diag(LiteralLoc, diag::err_target_version_unsupported);
+
   llvm::SmallVector<StringRef, 8> Features;
   if (Context.getTargetInfo().getTriple().isRISCV()) {
     llvm::SmallVector<StringRef, 8> AttrStrs;

``````````

</details>


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


More information about the cfe-commits mailing list