commit b483ec28e389130af63a6924276db6eef8ea4020 (tree)
parent 47d2e5de90faec1221f61255c36e2be81c9e3db3
Author: Meghan Denny <hello@nektro.net>
Date: Thu, 4 Dec 2025 23:38:36 -0800
tools: better detect '=' in clang options
Diffstat:
2 files changed, 54 insertions(+), 13 deletions(-)
diff --git a/src/clang_options_data.zig b/src/clang_options_data.zig
@@ -1372,7 +1372,7 @@ flagpsl("MT"),
.{
.name = "fsanitize=address",
.syntax = .flag,
- .zig_equivalent = .other,
+ .zig_equivalent = .sanitize,
.pd1 = true,
.pd2 = false,
.psl = true,
@@ -2214,8 +2214,22 @@ flagpd1("nocudalib"),
.pd2 = true,
.psl = false,
},
-flagpd1("mcpu=help"),
-flagpd1("mtune=help"),
+.{
+ .name = "mcpu=help",
+ .syntax = .flag,
+ .zig_equivalent = .mcpu,
+ .pd1 = true,
+ .pd2 = false,
+ .psl = false,
+},
+.{
+ .name = "mtune=help",
+ .syntax = .flag,
+ .zig_equivalent = .mcpu,
+ .pd1 = true,
+ .pd2 = false,
+ .psl = false,
+},
flagpd1("integrated-as"),
flagpd1("no-integrated-as"),
flagpd1("fopenmp-is-device"),
@@ -2365,12 +2379,12 @@ flagpd1("fno-cuda-approx-transcendentals"),
.pd2 = false,
.psl = true,
},
+flagpd1("shared-libasan"),
sepd1("Xmicrosoft-visualc-tools-root"),
sepd1("Xmicrosoft-visualc-tools-version"),
sepd1("Xmicrosoft-windows-sdk-root"),
sepd1("Xmicrosoft-windows-sdk-version"),
sepd1("Xmicrosoft-windows-sys-root"),
-flagpd1("shared-libasan"),
.{
.name = "Qembed_debug",
.syntax = .flag,
@@ -3204,6 +3218,7 @@ flagpd1("flang-experimental-hlfir"),
flagpd1("flarge-sizes"),
flagpd1("flat_namespace"),
flagpd1("flax-vector-conversions"),
+flagpd1("fexperimental-lifetime-safety"),
flagpd1("flimit-debug-info"),
flagpd1("flogical-abbreviations"),
flagpd1("floop-interchange"),
@@ -3216,8 +3231,22 @@ flagpd1("fversion-loops-for-stride"),
.pd2 = false,
.psl = false,
},
-flagpd1("flto=auto"),
-flagpd1("flto=jobserver"),
+.{
+ .name = "flto=auto",
+ .syntax = .flag,
+ .zig_equivalent = .lto,
+ .pd1 = true,
+ .pd2 = false,
+ .psl = false,
+},
+.{
+ .name = "flto=jobserver",
+ .syntax = .flag,
+ .zig_equivalent = .lto,
+ .pd1 = true,
+ .pd2 = false,
+ .psl = false,
+},
flagpd1("flto-unit"),
flagpd1("flto-visibility-public-std"),
flagpd1("fmath-errno"),
@@ -3519,6 +3548,7 @@ flagpd1("fno-keep-static-consts"),
flagpd1("fno-keep-system-includes"),
flagpd1("fno-knr-functions"),
flagpd1("fno-lax-vector-conversions"),
+flagpd1("fno-experimental-lifetime-safety"),
flagpd1("fno-limit-debug-info"),
flagpd1("fno-logical-abbreviations"),
flagpd1("fno-loop-interchange"),
@@ -3651,6 +3681,7 @@ flagpd1("fno-profile-values"),
flagpd1("fno-protect-parens"),
flagpd1("fno-pseudo-probe-for-profiling"),
flagpd1("fno-ptrauth-auth-traps"),
+flagpd1("fno-ptrauth-block-descriptor-pointers"),
flagpd1("fno-ptrauth-calls"),
flagpd1("fno-ptrauth-elf-got"),
flagpd1("fno-ptrauth-function-pointer-type-discrimination"),
@@ -3972,6 +4003,7 @@ flagpd1("fprofile-values"),
flagpd1("fprotect-parens"),
flagpd1("fpseudo-probe-for-profiling"),
flagpd1("fptrauth-auth-traps"),
+flagpd1("fptrauth-block-descriptor-pointers"),
flagpd1("fptrauth-calls"),
flagpd1("fptrauth-elf-got"),
flagpd1("fptrauth-function-pointer-type-discrimination"),
@@ -4503,9 +4535,9 @@ m("maes"),
sepd1("main-file-name"),
flagpd1("maix32"),
flagpd1("maix64"),
-m("maix-shared-lib-tls-model-opt"),
-m("maix-small-local-dynamic-tls"),
-m("maix-small-local-exec-tls"),
+flagpd1("maix-shared-lib-tls-model-opt"),
+flagpd1("maix-small-local-dynamic-tls"),
+flagpd1("maix-small-local-exec-tls"),
flagpd1("maix-struct-return"),
flagpd1("malign-double"),
m("maltivec"),
@@ -4530,10 +4562,10 @@ flagpd1("massembler-no-warn"),
m("matomics"),
m("mavx"),
flagpd1("mavx10.1"),
-m("mavx10.1-256"),
+flagpd1("mavx10.1-256"),
m("mavx10.1-512"),
flagpd1("mavx10.2"),
-m("mavx10.2-256"),
+flagpd1("mavx10.2-256"),
m("mavx10.2-512"),
m("mavx2"),
m("mavx512bf16"),
@@ -4750,7 +4782,7 @@ flagpd1("mno-apxf"),
m("mno-atomics"),
m("mno-avx"),
flagpd1("mno-avx10.1"),
-m("mno-avx10.1-256"),
+flagpd1("mno-avx10.1-256"),
m("mno-avx10.1-512"),
flagpd1("mno-avx10.2"),
m("mno-avx2"),
@@ -6544,6 +6576,14 @@ joinpd1("msmall-data-threshold="),
joinpd1("mvscale-streaming-max="),
joinpd1("mvscale-streaming-min="),
joinpd1("Wlarge-by-value-copy="),
+.{
+ .name = "Xthinlto-distributor=",
+ .syntax = .comma_joined,
+ .zig_equivalent = .other,
+ .pd1 = true,
+ .pd2 = false,
+ .psl = false,
+},
joinpd1("analyzer-constraints="),
joinpd1("analyzer-dump-egraph="),
jspd1("compatibility_version"),
@@ -6562,6 +6602,7 @@ joinpd1("fmodules-prune-after="),
},
joinpd1("fopenmp-target-debug="),
joinpd1("fsanitize-ignorelist="),
+joinpd1("fthinlto-distributor="),
joinpd1("fzero-call-used-regs="),
jspd1("iframeworkwithsysroot"),
joinpd1("mcode-object-version="),
diff --git a/tools/update_clang_options.zig b/tools/update_clang_options.zig
@@ -593,7 +593,7 @@ const known_options = [_]KnownOpt{
const blacklisted_options = [_][]const u8{};
fn knownOption(name: []const u8) ?[]const u8 {
- const chopped_name = if (std.mem.endsWith(u8, name, "=")) name[0 .. name.len - 1] else name;
+ const chopped_name = if (std.mem.indexOfScalar(u8, name, '=')) |idx| name[0..idx] else name;
for (known_options) |item| {
if (std.mem.eql(u8, chopped_name, item.name)) {
return item.ident;