https://github.com/JeewoongKim created https://github.com/llvm/llvm-project/pull/235578
Use the `-o` argument to determine the dependency file name and default target for `-MD` in clang-cl. Fixes #189195 >From a34524ca7f242ebcfc7befb73b49e4097b14c00a Mon Sep 17 00:00:00 2001 From: Jeewoong Kim <[email protected]> Date: Mon, 26 Oct 2026 12:21:22 +0900 Subject: [PATCH] [clang-cl] Fix dependency file naming with -o --- clang/lib/Driver/ToolChains/Clang.cpp | 5 +++-- clang/test/Driver/cl-options.c | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 5a1c8531812bd3..08b16883d7fc8a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -873,7 +873,8 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, // If user provided -o, that is the dependency target, except // when we are only generating a dependency file. - Arg *OutputOpt = Args.getLastArg(options::OPT_o, options::OPT__SLASH_Fo); + Arg *OutputOpt = Args.getLastArg(options::OPT_o, options::OPT__SLASH_o, + options::OPT__SLASH_Fo); if (OutputOpt && Output.getType() != types::TY_Dependencies) { DepTarget = OutputOpt->getValue(); } else { @@ -9250,7 +9251,7 @@ const char *Clang::getDependencyFileName(const ArgList &Args, const InputInfoList &Inputs) { // FIXME: Think about this more. - if (Arg *OutputOpt = Args.getLastArg(options::OPT_o)) { + if (Arg *OutputOpt = Args.getLastArg(options::OPT_o, options::OPT__SLASH_o)) { SmallString<128> OutputFilename(OutputOpt->getValue()); llvm::sys::path::replace_extension(OutputFilename, llvm::Twine('d')); return Args.MakeArgString(OutputFilename); diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c index 536b93890ef71e..10e500aa16f57f 100644 --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c @@ -816,6 +816,11 @@ // CLANG-NOT: "--dependent-lib=libcmt" // CLANG-NOT: "-vectorize-slp" +// Validate that -o determines the default dependency file and target. +// RUN: %clang_cl /clang:-MD -c -o out.o -### -- %s 2>&1 | FileCheck --check-prefix=DEPFILE-O %s +// DEPFILE-O: "-dependency-file" "out.d" +// DEPFILE-O-SAME: "-MT" "out.o" + // Cover PR42501: clang-cl /clang: pass-through causes read-after-free with aliased options. // RUN: %clang_cl /clang:-save-temps /clang:-Wl,test1,test2 -### -- %s 2>&1 | FileCheck -check-prefix=SAVETEMPS %s // SAVETEMPS: "-save-temps=cwd" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
