Author: Lane0218
Date: 2026-03-27T23:42:28+08:00
New Revision: ba01826c63eca2033266224ee4ebb5a266e47bcc

URL: 
https://github.com/llvm/llvm-project/commit/ba01826c63eca2033266224ee4ebb5a266e47bcc
DIFF: 
https://github.com/llvm/llvm-project/commit/ba01826c63eca2033266224ee4ebb5a266e47bcc.diff

LOG: [clang] Fix AArch64 -ffixed-x help text (#188911)

Fix the documented support set for AArch64 `-ffixed-xN` options to match
the current implementation.

This updates the generated option help text so that only the registers
actually supported by AArch64 are listed as `AArch64/RISC-V only`, and
marks `x8`, `x16`, `x17`, `x19`, and `x29`-`x31` as `RISC-V only`.

It also adds a driver test to cover the representative unsupported
AArch64 case for `-ffixed-x8`.

Fixes #186620.

Tests: `build-cir/bin/llvm-lit -sv
clang/test/Driver/aarch64-fixed-x-register.c`

Added: 
    

Modified: 
    clang/include/clang/Options/Options.td
    clang/test/Driver/aarch64-fixed-x-register.c

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 215d4e885709c..a752f44374415 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -5673,10 +5673,14 @@ def mno_bti_at_return_twice : Flag<["-"], 
"mno-bti-at-return-twice">,
   HelpText<"Do not add a BTI instruction after a setjmp or other"
            " return-twice construct (Arm/AArch64 only)">;
 
-foreach i = {1-31} in
+foreach i = {1-7,9-15,18,20-28} in
   def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_Group>,
     HelpText<"Reserve the x"#i#" register (AArch64/RISC-V only)">;
 
+foreach i = {8,16,17,19,29-31} in
+  def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_Group>,
+    HelpText<"Reserve the x"#i#" register (RISC-V only)">;
+
 def mlr_for_calls_only : Flag<["-"], "mlr-for-calls-only">, 
Group<m_aarch64_Features_Group>,
   HelpText<"Do not allocate the LR register for general purpose usage, only 
for calls. (AArch64 only)">;
 

diff  --git a/clang/test/Driver/aarch64-fixed-x-register.c 
b/clang/test/Driver/aarch64-fixed-x-register.c
index 7fc3e3e61105d..6af7a3003f69b 100644
--- a/clang/test/Driver/aarch64-fixed-x-register.c
+++ b/clang/test/Driver/aarch64-fixed-x-register.c
@@ -26,6 +26,10 @@
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X7 < %t %s
 // CHECK-FIXED-X7: "-target-feature" "+reserve-x7"
 
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x8 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X8 %s
+// CHECK-NO-FIXED-X8: error: unsupported option '-ffixed-x8' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X8-NOT: "+reserve-x8"
+
 // RUN: %clang --target=aarch64-none-gnu -ffixed-x9 -### %s 2> %t
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X9 < %t %s
 // CHECK-FIXED-X9: "-target-feature" "+reserve-x9"
@@ -54,10 +58,22 @@
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X15 < %t %s
 // CHECK-FIXED-X15: "-target-feature" "+reserve-x15"
 
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x16 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X16 %s
+// CHECK-NO-FIXED-X16: error: unsupported option '-ffixed-x16' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X16-NOT: "+reserve-x16"
+
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x17 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X17 %s
+// CHECK-NO-FIXED-X17: error: unsupported option '-ffixed-x17' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X17-NOT: "+reserve-x17"
+
 // RUN: %clang --target=aarch64-none-gnu -ffixed-x18 -### %s 2> %t
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s
 // CHECK-FIXED-X18: "-target-feature" "+reserve-x18"
 
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x19 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X19 %s
+// CHECK-NO-FIXED-X19: error: unsupported option '-ffixed-x19' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X19-NOT: "+reserve-x19"
+
 // RUN: %clang --target=aarch64-none-gnu -ffixed-x20 -### %s 2> %t
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X20 < %t %s
 // CHECK-FIXED-X20: "-target-feature" "+reserve-x20"
@@ -94,6 +110,18 @@
 // RUN: FileCheck --check-prefix=CHECK-FIXED-X28 < %t %s
 // CHECK-FIXED-X28: "-target-feature" "+reserve-x28"
 
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x29 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X29 %s
+// CHECK-NO-FIXED-X29: error: unsupported option '-ffixed-x29' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X29-NOT: "+reserve-x29"
+
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x30 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X30 %s
+// CHECK-NO-FIXED-X30: error: unsupported option '-ffixed-x30' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X30-NOT: "+reserve-x30"
+
+// RUN: not %clang --target=aarch64-none-gnu -ffixed-x31 -### %s 2>&1 | 
FileCheck --check-prefix=CHECK-NO-FIXED-X31 %s
+// CHECK-NO-FIXED-X31: error: unsupported option '-ffixed-x31' for target 
'aarch64-none-gnu'
+// CHECK-NO-FIXED-X31-NOT: "+reserve-x31"
+
 // Test multiple of reserve-x# options together.
 // RUN: %clang --target=aarch64-none-gnu \
 // RUN: -ffixed-x1 \


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to