Index: lib/Driver/Driver.cpp =================================================================== --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -1010,6 +1010,8 @@ .Case("obj", SaveTempsObj) .Default(SaveTempsCwd); } + for (auto *Str : {&Dir, &InstalledDir, &SysRoot, &DyldPrefix, &ResourceDir}) + *Str = llvm::sys::path::convert_to_slash(*Str); setLTOMode(Args); Index: lib/Driver/ToolChain.cpp =================================================================== --- lib/Driver/ToolChain.cpp +++ lib/Driver/ToolChain.cpp @@ -378,7 +378,7 @@ SmallString<128> P(LibPath); llvm::sys::path::append(P, Prefix + Twine("clang_rt.") + Component + Suffix); if (getVFS().exists(P)) - return P.str(); + return llvm::sys::path::convert_to_slash(P); } StringRef Arch = getArchNameForCompilerRTLib(*this, Args); @@ -386,7 +386,7 @@ SmallString<128> Path(getCompilerRTPath()); llvm::sys::path::append(Path, Prefix + Twine("clang_rt.") + Component + "-" + Arch + Env + Suffix); - return Path.str(); + return llvm::sys::path::convert_to_slash(Path); } const char *ToolChain::getCompilerRTArgString(const llvm::opt::ArgList &Args, @@ -425,7 +425,7 @@ } std::string ToolChain::GetFilePath(const char *Name) const { - return D.GetFilePath(Name, *this); + return llvm::sys::path::convert_to_slash(D.GetFilePath(Name, *this)); } std::string ToolChain::GetProgramPath(const char *Name) const { @@ -774,12 +774,14 @@ void ToolChain::AddFilePathLibArgs(const ArgList &Args, ArgStringList &CmdArgs) const { for (const auto &LibPath : getLibraryPaths()) - if(LibPath.length() > 0) - CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + LibPath)); + if (LibPath.length() > 0) + CmdArgs.push_back(Args.MakeArgString( + StringRef("-L") + llvm::sys::path::convert_to_slash(LibPath))); for (const auto &LibPath : getFilePaths()) - if(LibPath.length() > 0) - CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + LibPath)); + if (LibPath.length() > 0) + CmdArgs.push_back(Args.MakeArgString( + StringRef("-L") + llvm::sys::path::convert_to_slash(LibPath))); } void ToolChain::AddCCKextLibArgs(const ArgList &Args, Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3488,7 +3488,8 @@ // Handled with other dependency code. } else if (Output.isFilename()) { CmdArgs.push_back("-o"); - CmdArgs.push_back(Output.getFilename()); + CmdArgs.push_back(Args.MakeArgString( + llvm::sys::path::convert_to_slash(Output.getFilename()))); } else { assert(Output.isNothing() && "Input output."); } @@ -3496,7 +3497,8 @@ for (const auto &II : Inputs) { addDashXForInput(Args, II, CmdArgs); if (II.isFilename()) - CmdArgs.push_back(II.getFilename()); + CmdArgs.push_back(Args.MakeArgString( + llvm::sys::path::convert_to_slash(II.getFilename()))); else II.getInputArg().renderAsInput(Args, CmdArgs); } @@ -4893,7 +4895,8 @@ for (const InputInfo &Input : FrontendInputs) { if (Input.isFilename()) - CmdArgs.push_back(Input.getFilename()); + CmdArgs.push_back(Args.MakeArgString( + llvm::sys::path::convert_to_slash(Input.getFilename()))); else Input.getInputArg().renderAsInput(Args, CmdArgs); } Index: lib/Driver/ToolChains/Gnu.cpp =================================================================== --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -1655,7 +1655,7 @@ llvm::StringRef SysRoot) { const Arg *A = Args.getLastArg(clang::driver::options::OPT_gcc_toolchain); if (A) - return A->getValue(); + return llvm::sys::path::convert_to_slash(A->getValue()); // If we have a SysRoot, ignore GCC_INSTALL_PREFIX. // GCC_INSTALL_PREFIX specifies the gcc installation for the default