[PATCH] D51847: Print correctly dependency paths on Windows

Zachary Turner via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 12 06:54:12 PDT 2018


Lgtm
On Wed, Sep 12, 2018 at 3:23 AM Dávid Bolvanský via Phabricator <
reviews at reviews.llvm.org> wrote:

> xbolva00 updated this revision to Diff 165052.
> xbolva00 added a comment.
>
> - Fixed failing test
>
>
> https://reviews.llvm.org/D51847
>
> Files:
>   lib/Frontend/DependencyFile.cpp
>   test/Frontend/dependency-gen-escaping.c
>
>
> Index: test/Frontend/dependency-gen-escaping.c
> ===================================================================
> --- test/Frontend/dependency-gen-escaping.c
> +++ test/Frontend/dependency-gen-escaping.c
> @@ -21,7 +21,7 @@
>  // Backslash followed by # or space should escape both characters, because
>  // that's what GNU Make wants.  GCC does the right thing with space, but
> not
>  // #, so Clang does too. (There should be 3 backslashes before the #.)
> -// SEP2F: a\b\\#c\\\ d.h
> +// SEP2F: a{{[/\\]}}b{{[/\\]}}\#c{{/|\\\\}}\ d.h
>  // With -fms-compatibility, Backslashes in #include are treated as path
> separators.
>  // Backslashes are given in the emission for special characters, like
> 0x20 or 0x23.
>  // SEP5C: a{{[/\\]}}b{{[/\\]}}\#c{{/|\\\\}}\ d.h
> Index: lib/Frontend/DependencyFile.cpp
> ===================================================================
> --- lib/Frontend/DependencyFile.cpp
> +++ lib/Frontend/DependencyFile.cpp
> @@ -386,28 +386,32 @@
>  /// for Windows file-naming info.
>  static void PrintFilename(raw_ostream &OS, StringRef Filename,
>                            DependencyOutputFormat OutputFormat) {
> +  // Convert filename to platform native path
> +  llvm::SmallString<256> NativePath;
> +  llvm::sys::path::native(Filename.str(), NativePath);
> +
>    if (OutputFormat == DependencyOutputFormat::NMake) {
>      // Add quotes if needed. These are the characters listed as "special"
> to
>      // NMake, that are legal in a Windows filespec, and that could cause
>      // misinterpretation of the dependency string.
> -    if (Filename.find_first_of(" #${}^!") != StringRef::npos)
> -      OS << '\"' << Filename << '\"';
> +    if (NativePath.find_first_of(" #${}^!") != StringRef::npos)
> +      OS << '\"' << NativePath << '\"';
>      else
> -      OS << Filename;
> +      OS << NativePath;
>      return;
>    }
>    assert(OutputFormat == DependencyOutputFormat::Make);
> -  for (unsigned i = 0, e = Filename.size(); i != e; ++i) {
> -    if (Filename[i] == '#') // Handle '#' the broken gcc way.
> +  for (unsigned i = 0, e = NativePath.size(); i != e; ++i) {
> +    if (NativePath[i] == '#') // Handle '#' the broken gcc way.
>        OS << '\\';
> -    else if (Filename[i] == ' ') { // Handle space correctly.
> +    else if (NativePath[i] == ' ') { // Handle space correctly.
>        OS << '\\';
>        unsigned j = i;
> -      while (j > 0 && Filename[--j] == '\\')
> +      while (j > 0 && NativePath[--j] == '\\')
>          OS << '\\';
> -    } else if (Filename[i] == '$') // $ is escaped by $$.
> +    } else if (NativePath[i] == '$') // $ is escaped by $$.
>        OS << '$';
> -    OS << Filename[i];
> +    OS << NativePath[i];
>    }
>  }
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180912/6eaeff5e/attachment-0001.html>


More information about the cfe-commits mailing list