diff --git a/include/llvm/Support/Path.h b/include/llvm/Support/Path.h index ba18529b48a..cf821f0ef4a 100644 --- a/include/llvm/Support/Path.h +++ b/include/llvm/Support/Path.h @@ -295,6 +295,11 @@ const StringRef extension(StringRef path); /// @result true if \a value is a path separator character on the host OS bool is_separator(char value); +/// @brief Return the preferred separator for this platform. +/// +/// @result StringRef of the preferred separator, null-terminated. +const StringRef get_separator(); + /// @brief Get the typical temporary directory for the system, e.g., /// "/var/tmp" or "C:/TEMP" /// diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index 3ccc23f7d9e..be6731abedd 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -689,7 +689,7 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS, const SmallVectorImpl &MCDwarfDirs = context.getMCDwarfDirs(); if (MCDwarfDirs.size() > 0) { MCOS->EmitBytes(MCDwarfDirs[0]); - MCOS->EmitBytes("/"); + MCOS->EmitBytes(sys::path::get_separator()); } const SmallVectorImpl &MCDwarfFiles = MCOS->getContext().getMCDwarfFiles(); diff --git a/lib/Support/Path.cpp b/lib/Support/Path.cpp index d345829d4dd..b8d676f286c 100644 --- a/lib/Support/Path.cpp +++ b/lib/Support/Path.cpp @@ -569,6 +569,12 @@ bool is_separator(char value) { } } +static const char preferred_separator_string[] = { preferred_separator, '\0' }; + +const StringRef get_separator() { + return preferred_separator_string; +} + void system_temp_directory(bool erasedOnReboot, SmallVectorImpl &result) { result.clear(); diff --git a/lib/Support/SourceMgr.cpp b/lib/Support/SourceMgr.cpp index ca682897968..acd75fbbd19 100644 --- a/lib/Support/SourceMgr.cpp +++ b/lib/Support/SourceMgr.cpp @@ -18,6 +18,7 @@ #include "llvm/ADT/Twine.h" #include "llvm/Support/Locale.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/system_error.h" using namespace llvm; @@ -60,7 +61,7 @@ size_t SourceMgr::AddIncludeFile(const std::string &Filename, // If the file didn't exist directly, see if it's in an include path. for (unsigned i = 0, e = IncludeDirectories.size(); i != e && !NewBuf; ++i) { - IncludedFile = IncludeDirectories[i] + "/" + Filename; + IncludedFile = IncludeDirectories[i] + sys::path::get_separator().data() + Filename; MemoryBuffer::getFile(IncludedFile.c_str(), NewBuf); }