summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/include/lld/Core/Reproduce.h3
-rw-r--r--lld/lib/Core/Reproduce.cpp12
2 files changed, 14 insertions, 1 deletions
diff --git a/lld/include/lld/Core/Reproduce.h b/lld/include/lld/Core/Reproduce.h
index 6e1d36a5491..1b65f763ace 100644
--- a/lld/include/lld/Core/Reproduce.h
+++ b/lld/include/lld/Core/Reproduce.h
@@ -34,6 +34,9 @@ std::string rewritePath(StringRef S);
// Returns the string form of the given argument.
std::string toString(llvm::opt::Arg *Arg);
+
+// Replaces backslashes with slashes if Windows.
+std::string convertToUnixPathSeparator(StringRef S);
}
#endif
diff --git a/lld/lib/Core/Reproduce.cpp b/lld/lib/Core/Reproduce.cpp
index 58bf2bda5a8..ab7261fa0e7 100644
--- a/lld/lib/Core/Reproduce.cpp
+++ b/lld/lib/Core/Reproduce.cpp
@@ -39,7 +39,7 @@ std::string lld::relativeToRoot(StringRef Path) {
Res = Root.substr(2);
path::append(Res, path::relative_path(Abs));
- return Res.str();
+ return convertToUnixPathSeparator(Res);
}
// Quote a given string if it contains a space character.
@@ -64,3 +64,13 @@ std::string lld::toString(opt::Arg *Arg) {
return K + V;
return K + " " + V;
}
+
+std::string lld::convertToUnixPathSeparator(StringRef S) {
+#ifdef LLVM_ON_WIN32
+ std::string Ret = S.str();
+ std::replace(Ret.begin(), Ret.end(), '\\', '/');
+ return Ret;
+#else
+ return S;
+#endif
+}
OpenPOWER on IntegriCloud