[Clang] Only allow clang arguments to -Xarch (#126101)

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
This commit is contained in:
Joseph Huber
2025-02-06 16:36:08 -06:00
committed by GitHub
parent 6e2f08b2f8
commit fe58eee602
2 changed files with 6 additions and 1 deletions

View File

@@ -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

View File

@@ -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"