https://github.com/jhuber6 updated https://github.com/llvm/llvm-project/pull/126101
>From de568616e5f493b6bc8bd8e3a8080108599a6051 Mon Sep 17 00:00:00 2001 From: Joseph Huber <hube...@outlook.com> Date: Thu, 6 Feb 2025 11:37:09 -0600 Subject: [PATCH] [Clang] Only allow `clang` arguments to `-Xarch` Summary: Currently the `-Xarch` argument needs to re-parse the option, which goes through every single registered argument. This causes errors when trying to pass `-O1` through it because it thinks it's a DXC option. This patch changes the behavior to only allow `clang` options. Concievably we could detect the driver mode to make this more robust, but I don't know if there are other users for this. Fixes: https://github.com/llvm/llvm-project/issues/110325 --- clang/lib/Driver/ToolChain.cpp | 3 ++- clang/test/Driver/Xarch.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index c25d1b6be14b50d..56bc500da66b9f5 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -1651,7 +1651,8 @@ void ToolChain::TranslateXarchArgs( const InputArgList &BaseArgs = Args.getBaseArgs(); unsigned Index = BaseArgs.MakeIndex(A->getValue(ValuePos)); unsigned Prev = Index; - std::unique_ptr<llvm::opt::Arg> XarchArg(Opts.ParseOneArg(Args, Index)); + std::unique_ptr<llvm::opt::Arg> XarchArg(Opts.ParseOneArg( + Args, Index, llvm::opt::Visibility(clang::driver::options::ClangOption))); // If the argument parsing failed or more than one argument was // consumed, the -Xarch_ argument's parameter tried to consume diff --git a/clang/test/Driver/Xarch.c b/clang/test/Driver/Xarch.c index f35e2926f9c8d5f..95bd0c502ddb31b 100644 --- a/clang/test/Driver/Xarch.c +++ b/clang/test/Driver/Xarch.c @@ -18,3 +18,7 @@ // RUN: %clang -target x86_64-unknown-linux-gnu -Xarch_x86_64 -Wl,foo %s -### 2>&1 | FileCheck -check-prefix=LINKER %s // LINKER: "foo" + +// RUN: %clang -target x86_64-unknown-linux-gnu -Xarch_x86_64 -O1 %s -S -### 2>&1 | FileCheck -check-prefix=O1ONCE %s +// O1ONCE: "-O1" +// O1ONCE-NOT: "-O1" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits