diff options
| author | Luke Cheeseman <luke.cheeseman@arm.com> | 2019-09-13 13:15:35 +0000 |
|---|---|---|
| committer | Luke Cheeseman <luke.cheeseman@arm.com> | 2019-09-13 13:15:35 +0000 |
| commit | ab9acda026e4beee458a953f02fd8c342c89ad56 (patch) | |
| tree | 99b131eab5ded7066c105a0d57f6b4dda5c89bb7 | |
| parent | d48ea5da94165dbaba14b1281b74994fe970a7e0 (diff) | |
| download | bcm5719-llvm-ab9acda026e4beee458a953f02fd8c342c89ad56.tar.gz bcm5719-llvm-ab9acda026e4beee458a953f02fd8c342c89ad56.zip | |
Fix depfile name construction
- When using -o, the provided filename is using for constructing the depfile
name (when -MMD is passed).
- The logic looks for the rightmost '.' character and replaces what comes after
with 'd'.
- This works incorrectly when the filename has no extension and the directories
have '.' in them (e.g. out.dir/test)
- This replaces the funciton to just llvm::sys::path functionality
Differential Revision: https://reviews.llvm.org/D67542
llvm-svn: 371853
| -rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 11 | ||||
| -rw-r--r-- | clang/test/Driver/metadata-with-dots.c | 11 |
2 files changed, 16 insertions, 6 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 95295459e0e..d848d213601 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6066,15 +6066,14 @@ const char *Clang::getBaseInputStem(const ArgList &Args, const char *Clang::getDependencyFileName(const ArgList &Args, const InputInfoList &Inputs) { // FIXME: Think about this more. - std::string Res; if (Arg *OutputOpt = Args.getLastArg(options::OPT_o)) { - std::string Str(OutputOpt->getValue()); - Res = Str.substr(0, Str.rfind('.')); - } else { - Res = getBaseInputStem(Args, Inputs); + SmallString<128> OutputFilename(OutputOpt->getValue()); + llvm::sys::path::replace_extension(OutputFilename, llvm::Twine('d')); + return Args.MakeArgString(OutputFilename); } - return Args.MakeArgString(Res + ".d"); + + return Args.MakeArgString(std::string(getBaseInputStem(Args, Inputs)) + ".d"); } // Begin ClangAs diff --git a/clang/test/Driver/metadata-with-dots.c b/clang/test/Driver/metadata-with-dots.c new file mode 100644 index 00000000000..371b48bd2cc --- /dev/null +++ b/clang/test/Driver/metadata-with-dots.c @@ -0,0 +1,11 @@ +// REQUIRES: shell +// RUN: mkdir -p out.dir +// RUN: cat %s > out.dir/test.c +// RUN: %clang -E -MMD %s -o out.dir/test +// RUN: test ! -f %out.d +// RUN: test -f out.dir/test.d +// RUN: rm -rf out.dir/test.d out.dir/ out.d +int main (void) +{ + return 0; +} |

