diff --git a/clang-tools-extra/clang-move/tool/ClangMove.cpp b/clang-tools-extra/clang-move/tool/ClangMove.cpp --- a/clang-tools-extra/clang-move/tool/ClangMove.cpp +++ b/clang-tools-extra/clang-move/tool/ClangMove.cpp @@ -30,7 +30,8 @@ std::error_code CreateNewFile(const llvm::Twine &path) { int fd = 0; if (std::error_code ec = llvm::sys::fs::openFileForWrite( - path, fd, llvm::sys::fs::CD_CreateAlways, llvm::sys::fs::OF_Text)) + path, fd, llvm::sys::fs::CD_CreateAlways, + llvm::sys::fs::OF_TextWithCRLF)) return ec; return llvm::sys::Process::SafelyCloseFileDescriptor(fd); diff --git a/clang-tools-extra/modularize/ModuleAssistant.cpp b/clang-tools-extra/modularize/ModuleAssistant.cpp --- a/clang-tools-extra/modularize/ModuleAssistant.cpp +++ b/clang-tools-extra/modularize/ModuleAssistant.cpp @@ -268,7 +268,7 @@ // Set up module map output file. std::error_code EC; - llvm::ToolOutputFile Out(FilePath, EC, llvm::sys::fs::OF_Text); + llvm::ToolOutputFile Out(FilePath, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { llvm::errs() << Argv0 << ": error opening " << FilePath << ":" << EC.message() << "\n"; diff --git a/clang-tools-extra/pp-trace/PPTrace.cpp b/clang-tools-extra/pp-trace/PPTrace.cpp --- a/clang-tools-extra/pp-trace/PPTrace.cpp +++ b/clang-tools-extra/pp-trace/PPTrace.cpp @@ -152,7 +152,7 @@ OptionsParser->getSourcePathList()); std::error_code EC; - llvm::ToolOutputFile Out(OutputFileName, EC, llvm::sys::fs::OF_Text); + llvm::ToolOutputFile Out(OutputFileName, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) error(EC.message()); PPTraceFrontendActionFactory Factory(Filters, Out.os()); diff --git a/clang/lib/ARCMigrate/PlistReporter.cpp b/clang/lib/ARCMigrate/PlistReporter.cpp --- a/clang/lib/ARCMigrate/PlistReporter.cpp +++ b/clang/lib/ARCMigrate/PlistReporter.cpp @@ -56,7 +56,7 @@ } std::error_code EC; - llvm::raw_fd_ostream o(outPath, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream o(outPath, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { llvm::errs() << "error: could not create file: " << outPath << '\n'; return; diff --git a/clang/lib/Driver/Compilation.cpp b/clang/lib/Driver/Compilation.cpp --- a/clang/lib/Driver/Compilation.cpp +++ b/clang/lib/Driver/Compilation.cpp @@ -175,7 +175,7 @@ std::error_code EC; OwnedStream.reset(new llvm::raw_fd_ostream( getDriver().CCPrintOptionsFilename.c_str(), EC, - llvm::sys::fs::OF_Append | llvm::sys::fs::OF_Text)); + llvm::sys::fs::OF_Append | llvm::sys::fs::OF_TextWithCRLF)); if (EC) { getDriver().Diag(diag::err_drv_cc_print_options_failure) << EC.message(); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2264,8 +2264,8 @@ if (!CompilationDatabase) { std::error_code EC; - auto File = std::make_unique(Filename, EC, - llvm::sys::fs::OF_Text); + auto File = std::make_unique( + Filename, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { D.Diag(clang::diag::err_drv_compilationdatabase) << Filename << EC.message(); diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -277,7 +277,7 @@ // Create the output stream. auto FileOS = std::make_unique( DiagOpts->DiagnosticLogFile, EC, - llvm::sys::fs::OF_Append | llvm::sys::fs::OF_Text); + llvm::sys::fs::OF_Append | llvm::sys::fs::OF_TextWithCRLF); if (EC) { Diags.Report(diag::warn_fe_cc_log_diagnostics_failure) << DiagOpts->DiagnosticLogFile << EC.message(); @@ -843,7 +843,7 @@ std::error_code EC; OS.reset(new llvm::raw_fd_ostream( *OSFile, EC, - (Binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_Text))); + (Binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_TextWithCRLF))); if (EC) return llvm::errorCodeToError(EC); } @@ -1001,7 +1001,7 @@ if (!StatsFile.empty()) { std::error_code EC; auto StatS = std::make_unique( - StatsFile, EC, llvm::sys::fs::OF_Text); + StatsFile, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { getDiagnostics().Report(diag::warn_fe_unable_to_open_stats_file) << StatsFile << EC.message(); diff --git a/clang/lib/Frontend/DependencyFile.cpp b/clang/lib/Frontend/DependencyFile.cpp --- a/clang/lib/Frontend/DependencyFile.cpp +++ b/clang/lib/Frontend/DependencyFile.cpp @@ -307,7 +307,7 @@ } std::error_code EC; - llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { Diags.Report(diag::err_fe_error_opening) << OutputFile << EC.message(); return; diff --git a/clang/lib/Frontend/DependencyGraph.cpp b/clang/lib/Frontend/DependencyGraph.cpp --- a/clang/lib/Frontend/DependencyGraph.cpp +++ b/clang/lib/Frontend/DependencyGraph.cpp @@ -100,7 +100,7 @@ void DependencyGraphCallback::OutputGraphFile() { std::error_code EC; - llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { PP->getDiagnostics().Report(diag::err_fe_error_opening) << OutputFile << EC.message(); diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -722,7 +722,7 @@ if (!OutputFileName.empty() && OutputFileName != "-") { std::error_code EC; OutFile.reset(new llvm::raw_fd_ostream(OutputFileName.str(), EC, - llvm::sys::fs::OF_Text)); + llvm::sys::fs::OF_TextWithCRLF)); } llvm::raw_ostream &Out = OutFile.get()? *OutFile.get() : llvm::outs(); diff --git a/clang/lib/Frontend/HeaderIncludeGen.cpp b/clang/lib/Frontend/HeaderIncludeGen.cpp --- a/clang/lib/Frontend/HeaderIncludeGen.cpp +++ b/clang/lib/Frontend/HeaderIncludeGen.cpp @@ -101,7 +101,7 @@ std::error_code EC; llvm::raw_fd_ostream *OS = new llvm::raw_fd_ostream( OutputPath.str(), EC, - llvm::sys::fs::OF_Append | llvm::sys::fs::OF_Text); + llvm::sys::fs::OF_Append | llvm::sys::fs::OF_TextWithCRLF); if (EC) { PP.getDiagnostics().Report(clang::diag::warn_fe_cc_print_header_failure) << EC.message(); diff --git a/clang/lib/Frontend/ModuleDependencyCollector.cpp b/clang/lib/Frontend/ModuleDependencyCollector.cpp --- a/clang/lib/Frontend/ModuleDependencyCollector.cpp +++ b/clang/lib/Frontend/ModuleDependencyCollector.cpp @@ -148,7 +148,7 @@ std::error_code EC; SmallString<256> YAMLPath = VFSDir; llvm::sys::path::append(YAMLPath, "vfs.yaml"); - llvm::raw_fd_ostream OS(YAMLPath, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(YAMLPath, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { HasErrors = true; return; diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -4172,7 +4172,8 @@ // Overwrite the timestamp file contents so that file's mtime changes. std::string TimestampFilename = MF.getTimestampFilename(); std::error_code EC; - llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(TimestampFilename, EC, + llvm::sys::fs::OF_TextWithCRLF); if (EC) return; OS << "Timestamp file\n"; diff --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp --- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp @@ -660,7 +660,7 @@ // Open the file. std::error_code EC; - llvm::raw_fd_ostream o(OutputFile, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream o(OutputFile, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { llvm::errs() << "warning: could not create file: " << EC.message() << '\n'; return; diff --git a/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp --- a/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp @@ -387,7 +387,7 @@ // file can become large very quickly, so decoding into JSON to append a run // may be an expensive operation. std::error_code EC; - llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { llvm::errs() << "warning: could not create file: " << EC.message() << '\n'; return; diff --git a/clang/tools/clang-refactor/ClangRefactor.cpp b/clang/tools/clang-refactor/ClangRefactor.cpp --- a/clang/tools/clang-refactor/ClangRefactor.cpp +++ b/clang/tools/clang-refactor/ClangRefactor.cpp @@ -499,7 +499,7 @@ if (opts::Inplace) { std::error_code EC; - llvm::raw_fd_ostream OS(File, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(File, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { llvm::errs() << EC.message() << "\n"; return true; diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp --- a/clang/tools/driver/cc1as_main.cpp +++ b/clang/tools/driver/cc1as_main.cpp @@ -324,7 +324,7 @@ std::error_code EC; auto Out = std::make_unique( - Path, EC, (Binary ? sys::fs::OF_None : sys::fs::OF_Text)); + Path, EC, (Binary ? sys::fs::OF_None : sys::fs::OF_TextWithCRLF)); if (EC) { Diags.Report(diag::err_fe_unable_to_open_output) << Path << EC.message(); return nullptr; diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp --- a/flang/lib/Frontend/CompilerInstance.cpp +++ b/flang/lib/Frontend/CompilerInstance.cpp @@ -112,7 +112,7 @@ if (!os) { osFile = outputFilePath; os.reset(new llvm::raw_fd_ostream(osFile, error, - (binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_Text))); + (binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_TextWithCRLF))); if (error) return nullptr; } diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -414,7 +414,7 @@ // Create the default manifest file as a temporary file. TemporaryFile Default("defaultxml", "manifest"); std::error_code ec; - raw_fd_ostream os(Default.path, ec, sys::fs::OF_Text); + raw_fd_ostream os(Default.path, ec, sys::fs::OF_TextWithCRLF); if (ec) fatal("failed to open " + Default.path + ": " + ec.message()); os << defaultXml; @@ -516,7 +516,7 @@ if (path == "") path = config->outputFile + ".manifest"; std::error_code ec; - raw_fd_ostream out(path, ec, sys::fs::OF_Text); + raw_fd_ostream out(path, ec, sys::fs::OF_TextWithCRLF); if (ec) fatal("failed to create manifest: " + ec.message()); out << createManifestXml(); diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp --- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp +++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp @@ -1299,7 +1299,7 @@ llvm::Error writeFile(const lld::File &file, StringRef outPath) override { // Create stream to path. std::error_code ec; - llvm::raw_fd_ostream out(outPath, ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream out(outPath, ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return llvm::errorCodeToError(ec); diff --git a/lldb/include/lldb/Utility/ReproducerProvider.h b/lldb/include/lldb/Utility/ReproducerProvider.h --- a/lldb/include/lldb/Utility/ReproducerProvider.h +++ b/lldb/include/lldb/Utility/ReproducerProvider.h @@ -32,7 +32,8 @@ protected: AbstractRecorder(const FileSpec &filename, std::error_code &ec) : m_filename(filename.GetFilename().GetStringRef()), - m_os(filename.GetPath(), ec, llvm::sys::fs::OF_Text), m_record(true) {} + m_os(filename.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF), + m_record(true) {} public: const FileSpec &GetFilename() { return m_filename; } @@ -168,7 +169,7 @@ void Keep() override { FileSpec file = this->GetRoot().CopyByAppendingPathComponent(T::Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; os << m_directory << "\n"; @@ -290,7 +291,7 @@ FileSpec file = this->GetRoot().CopyByAppendingPathComponent(V::Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; llvm::yaml::Output yout(os); diff --git a/lldb/source/Utility/GDBRemote.cpp b/lldb/source/Utility/GDBRemote.cpp --- a/lldb/source/Utility/GDBRemote.cpp +++ b/lldb/source/Utility/GDBRemote.cpp @@ -104,7 +104,7 @@ FileSpec file = GetRoot().CopyByAppendingPathComponent(Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; yaml::Output yout(os); @@ -150,8 +150,8 @@ FileSpec history_file = GetRoot().CopyByAppendingPathComponent(Info::file); std::error_code EC; - m_stream_up = std::make_unique(history_file.GetPath(), EC, - sys::fs::OpenFlags::OF_Text); + m_stream_up = std::make_unique( + history_file.GetPath(), EC, sys::fs::OpenFlags::OF_TextWithCRLF); return m_stream_up.get(); } diff --git a/lldb/source/Utility/ReproducerProvider.cpp b/lldb/source/Utility/ReproducerProvider.cpp --- a/lldb/source/Utility/ReproducerProvider.cpp +++ b/lldb/source/Utility/ReproducerProvider.cpp @@ -39,7 +39,7 @@ void VersionProvider::Keep() { FileSpec file = GetRoot().CopyByAppendingPathComponent(Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; os << m_version << "\n"; @@ -108,7 +108,7 @@ FileSpec file = GetRoot().CopyByAppendingPathComponent(Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; llvm::yaml::Output yout(os); @@ -153,7 +153,7 @@ void SymbolFileProvider::Keep() { FileSpec file = this->GetRoot().CopyByAppendingPathComponent(Info::file); std::error_code ec; - llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream os(file.GetPath(), ec, llvm::sys::fs::OF_TextWithCRLF); if (ec) return; diff --git a/lldb/tools/lldb-server/LLDBServerUtilities.cpp b/lldb/tools/lldb-server/LLDBServerUtilities.cpp --- a/lldb/tools/lldb-server/LLDBServerUtilities.cpp +++ b/lldb/tools/lldb-server/LLDBServerUtilities.cpp @@ -24,7 +24,7 @@ if (!log_file.empty()) { std::error_code EC; std::shared_ptr stream_sp = std::make_shared( - log_file, EC, sys::fs::OF_Text | sys::fs::OF_Append); + log_file, EC, sys::fs::OF_TextWithCRLF | sys::fs::OF_Append); if (!EC) return stream_sp; errs() << llvm::formatv( diff --git a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h --- a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h +++ b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h @@ -97,7 +97,7 @@ errs() << "Writing '" << Filename << "'..."; - raw_fd_ostream File(Filename, EC, sys::fs::OF_Text); + raw_fd_ostream File(Filename, EC, sys::fs::OF_TextWithCRLF); std::string GraphName = DOTGraphTraits::getGraphName(Graph); std::string Title = GraphName + " for '" + F.getName().str() + "' function"; @@ -160,7 +160,7 @@ errs() << "Writing '" << Filename << "'..."; - raw_fd_ostream File(Filename, EC, sys::fs::OF_Text); + raw_fd_ostream File(Filename, EC, sys::fs::OF_TextWithCRLF); std::string Title = DOTGraphTraits::getGraphName(Graph); if (!EC) diff --git a/llvm/include/llvm/Support/FileSystem.h b/llvm/include/llvm/Support/FileSystem.h --- a/llvm/include/llvm/Support/FileSystem.h +++ b/llvm/include/llvm/Support/FileSystem.h @@ -742,24 +742,34 @@ OF_None = 0, F_None = 0, // For compatibility - /// The file should be opened in text mode on platforms that make this - /// distinction. + /// The file should be opened in text mode on platforms like z/OS that make + /// this distinction. OF_Text = 1, F_Text = 1, // For compatibility + /// The file should use a carriage linefeed '\r\n'. This flag should only be + /// used with OF_Text. Only makes a difference on Windows. + OF_CRLF = 2, + + /// The file should be opened in text mode and use a carriage linefeed '\r\n'. + /// This flag has the same functionality as OF_Text on z/OS but adds a + /// carriage linefeed on Windows. + OF_TextWithCRLF = OF_Text | OF_CRLF, + /// The file should be opened in append mode. - OF_Append = 2, - F_Append = 2, // For compatibility + OF_Append = 4, + F_Append = 4, // For compatibility /// Delete the file on close. Only makes a difference on windows. - OF_Delete = 4, + OF_Delete = 8, /// When a child process is launched, this file should remain open in the /// child process. - OF_ChildInherit = 8, + OF_ChildInherit = 16, - /// Force files Atime to be updated on access. Only makes a difference on windows. - OF_UpdateAtime = 16, + /// Force files Atime to be updated on access. Only makes a difference on + /// Windows. + OF_UpdateAtime = 32, }; /// Create a potentially unique file name but does not create it. diff --git a/llvm/lib/CodeGen/RegAllocPBQP.cpp b/llvm/lib/CodeGen/RegAllocPBQP.cpp --- a/llvm/lib/CodeGen/RegAllocPBQP.cpp +++ b/llvm/lib/CodeGen/RegAllocPBQP.cpp @@ -859,7 +859,7 @@ std::string GraphFileName = FullyQualifiedName + "." + RS.str() + ".pbqpgraph"; std::error_code EC; - raw_fd_ostream OS(GraphFileName, EC, sys::fs::OF_Text); + raw_fd_ostream OS(GraphFileName, EC, sys::fs::OF_TextWithCRLF); LLVM_DEBUG(dbgs() << "Dumping graph for round " << Round << " to \"" << GraphFileName << "\"\n"); G.dump(OS); diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -412,7 +412,7 @@ LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename, char **ErrorMessage) { std::error_code EC; - raw_fd_ostream dest(Filename, EC, sys::fs::OF_Text); + raw_fd_ostream dest(Filename, EC, sys::fs::OF_TextWithCRLF); if (EC) { *ErrorMessage = strdup(EC.message().c_str()); return true; diff --git a/llvm/lib/IR/LLVMRemarkStreamer.cpp b/llvm/lib/IR/LLVMRemarkStreamer.cpp --- a/llvm/lib/IR/LLVMRemarkStreamer.cpp +++ b/llvm/lib/IR/LLVMRemarkStreamer.cpp @@ -106,7 +106,7 @@ return make_error(std::move(E)); std::error_code EC; - auto Flags = *Format == remarks::Format::YAML ? sys::fs::OF_Text + auto Flags = *Format == remarks::Format::YAML ? sys::fs::OF_TextWithCRLF : sys::fs::OF_None; auto RemarksFile = std::make_unique(RemarksFilename, EC, Flags); diff --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cpp --- a/llvm/lib/LTO/LTOBackend.cpp +++ b/llvm/lib/LTO/LTOBackend.cpp @@ -85,8 +85,9 @@ ShouldDiscardValueNames = false; std::error_code EC; - ResolutionFile = std::make_unique( - OutputFileName + "resolution.txt", EC, sys::fs::OpenFlags::OF_Text); + ResolutionFile = + std::make_unique(OutputFileName + "resolution.txt", EC, + sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) { ResolutionFile.reset(); return errorCodeToError(EC); diff --git a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp --- a/llvm/lib/MC/MCParser/DarwinAsmParser.cpp +++ b/llvm/lib/MC/MCParser/DarwinAsmParser.cpp @@ -776,8 +776,9 @@ raw_fd_ostream *OS = getContext().getSecureLog(); if (!OS) { std::error_code EC; - auto NewOS = std::make_unique( - StringRef(SecureLogFile), EC, sys::fs::OF_Append | sys::fs::OF_Text); + auto NewOS = std::make_unique(StringRef(SecureLogFile), EC, + sys::fs::OF_Append | + sys::fs::OF_TextWithCRLF); if (EC) return Error(IDLoc, Twine("can't open secure log file: ") + SecureLogFile + " (" + EC.message() + ")"); diff --git a/llvm/lib/ProfileData/GCOV.cpp b/llvm/lib/ProfileData/GCOV.cpp --- a/llvm/lib/ProfileData/GCOV.cpp +++ b/llvm/lib/ProfileData/GCOV.cpp @@ -866,7 +866,7 @@ Optional os; if (!options.UseStdout) { std::error_code ec; - os.emplace(gcovName, ec, sys::fs::OF_Text); + os.emplace(gcovName, ec, sys::fs::OF_TextWithCRLF); if (ec) { errs() << ec.message() << '\n'; continue; @@ -881,7 +881,7 @@ // (PR GCC/82702). We create just one file. std::string outputPath(sys::path::filename(filename)); std::error_code ec; - raw_fd_ostream os(outputPath + ".gcov", ec, sys::fs::OF_Text); + raw_fd_ostream os(outputPath + ".gcov", ec, sys::fs::OF_TextWithCRLF); if (ec) { errs() << ec.message() << '\n'; return; diff --git a/llvm/lib/ProfileData/SampleProfWriter.cpp b/llvm/lib/ProfileData/SampleProfWriter.cpp --- a/llvm/lib/ProfileData/SampleProfWriter.cpp +++ b/llvm/lib/ProfileData/SampleProfWriter.cpp @@ -728,7 +728,7 @@ Format == SPF_Compact_Binary) OS.reset(new raw_fd_ostream(Filename, EC, sys::fs::OF_None)); else - OS.reset(new raw_fd_ostream(Filename, EC, sys::fs::OF_Text)); + OS.reset(new raw_fd_ostream(Filename, EC, sys::fs::OF_TextWithCRLF)); if (EC) return EC; diff --git a/llvm/lib/Support/FileCollector.cpp b/llvm/lib/Support/FileCollector.cpp --- a/llvm/lib/Support/FileCollector.cpp +++ b/llvm/lib/Support/FileCollector.cpp @@ -241,7 +241,7 @@ VFSWriter.setUseExternalNames(false); std::error_code EC; - raw_fd_ostream os(MappingFile, EC, sys::fs::OF_Text); + raw_fd_ostream os(MappingFile, EC, sys::fs::OF_TextWithCRLF); if (EC) return EC; diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -259,7 +259,7 @@ getFileAux(const Twine &Filename, uint64_t MapSize, uint64_t Offset, bool IsText, bool RequiresNullTerminator, bool IsVolatile) { Expected FDOrErr = sys::fs::openNativeFileForRead( - Filename, IsText ? sys::fs::OF_Text : sys::fs::OF_None); + Filename, IsText ? sys::fs::OF_TextWithCRLF : sys::fs::OF_None); if (!FDOrErr) return errorToErrorCode(FDOrErr.takeError()); sys::fs::file_t FD = *FDOrErr; diff --git a/llvm/lib/Support/TimeProfiler.cpp b/llvm/lib/Support/TimeProfiler.cpp --- a/llvm/lib/Support/TimeProfiler.cpp +++ b/llvm/lib/Support/TimeProfiler.cpp @@ -304,7 +304,7 @@ } std::error_code EC; - raw_fd_ostream OS(Path, EC, sys::fs::OF_Text); + raw_fd_ostream OS(Path, EC, sys::fs::OF_TextWithCRLF); if (EC) return createStringError(EC, "Could not open " + Path); diff --git a/llvm/lib/Support/Timer.cpp b/llvm/lib/Support/Timer.cpp --- a/llvm/lib/Support/Timer.cpp +++ b/llvm/lib/Support/Timer.cpp @@ -82,7 +82,7 @@ // info output file before running commands which write to it. std::error_code EC; auto Result = std::make_unique( - OutputFilename, EC, sys::fs::OF_Append | sys::fs::OF_Text); + OutputFilename, EC, sys::fs::OF_Append | sys::fs::OF_TextWithCRLF); if (!EC) return Result; diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc --- a/llvm/lib/Support/Unix/Program.inc +++ b/llvm/lib/Support/Unix/Program.inc @@ -507,7 +507,7 @@ llvm::sys::writeFileWithEncoding(StringRef FileName, StringRef Contents, WindowsEncodingMethod Encoding /*unused*/) { std::error_code EC; - llvm::raw_fd_ostream OS(FileName, EC, llvm::sys::fs::OpenFlags::OF_Text); + llvm::raw_fd_ostream OS(FileName, EC, llvm::sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return EC; diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -1083,8 +1083,10 @@ if (Flags & OF_Append) CrtOpenFlags |= _O_APPEND; - if (Flags & OF_Text) + if (Flags & OF_CRLF) { + assert(Flags & OF_Text && "Flags set OF_CRLF without OF_Text"); CrtOpenFlags |= _O_TEXT; + } ResultFD = -1; if (!H) diff --git a/llvm/lib/Support/Windows/Program.inc b/llvm/lib/Support/Windows/Program.inc --- a/llvm/lib/Support/Windows/Program.inc +++ b/llvm/lib/Support/Windows/Program.inc @@ -506,7 +506,7 @@ llvm::sys::writeFileWithEncoding(StringRef FileName, StringRef Contents, WindowsEncodingMethod Encoding) { std::error_code EC; - llvm::raw_fd_ostream OS(FileName, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(FileName, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) return EC; diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -2413,7 +2413,7 @@ std::error_code EC; - raw_fd_ostream File(Filename, EC, sys::fs::OF_Text); + raw_fd_ostream File(Filename, EC, sys::fs::OF_TextWithCRLF); if (!EC) llvm::WriteGraph(File, this); diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp --- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp +++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp @@ -1722,7 +1722,7 @@ ExitOnError ExitOnErr("-lowertypetests-write-summary: " + ClWriteSummary + ": "); std::error_code EC; - raw_fd_ostream OS(ClWriteSummary, EC, sys::fs::OF_Text); + raw_fd_ostream OS(ClWriteSummary, EC, sys::fs::OF_TextWithCRLF); ExitOnErr(errorCodeToError(EC)); yaml::Output Out(OS); diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp --- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp @@ -918,7 +918,7 @@ ExitOnErr(errorCodeToError(EC)); WriteIndexToFile(*Summary, OS); } else { - raw_fd_ostream OS(ClWriteSummary, EC, sys::fs::OF_Text); + raw_fd_ostream OS(ClWriteSummary, EC, sys::fs::OF_TextWithCRLF); ExitOnErr(errorCodeToError(EC)); yaml::Output Out(OS); Out << *Summary; diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp --- a/llvm/lib/Transforms/Utils/Debugify.cpp +++ b/llvm/lib/Transforms/Utils/Debugify.cpp @@ -440,7 +440,7 @@ llvm::json::Array &Bugs) { std::error_code EC; raw_fd_ostream OS_FILE{OrigDIVerifyBugsReportFilePath, EC, - sys::fs::OF_Append | sys::fs::OF_Text}; + sys::fs::OF_Append | sys::fs::OF_TextWithCRLF}; if (EC) { errs() << "Could not open file: " << EC.message() << ", " << OrigDIVerifyBugsReportFilePath << '\n'; diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp --- a/llvm/tools/dsymutil/dsymutil.cpp +++ b/llvm/tools/dsymutil/dsymutil.cpp @@ -312,7 +312,7 @@ SmallString<128> InfoPlist(BundleRoot); sys::path::append(InfoPlist, "Contents/Info.plist"); std::error_code EC; - raw_fd_ostream PL(InfoPlist, EC, sys::fs::OF_Text); + raw_fd_ostream PL(InfoPlist, EC, sys::fs::OF_TextWithCRLF); if (EC) return make_error( "cannot create Plist: " + toString(errorCodeToError(EC)), EC); diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -276,7 +276,7 @@ std::error_code EC; sys::fs::OpenFlags OpenFlags = sys::fs::OF_None; if (!Binary) - OpenFlags |= sys::fs::OF_Text; + OpenFlags |= sys::fs::OF_TextWithCRLF; auto FDOut = std::make_unique(OutputFilename, EC, OpenFlags); if (EC) { reportError(EC.message()); diff --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp --- a/llvm/tools/lli/lli.cpp +++ b/llvm/tools/lli/lli.cpp @@ -791,7 +791,8 @@ case DumpKind::DumpModsToDisk: return [](Module &M) { std::error_code EC; - raw_fd_ostream Out(M.getModuleIdentifier() + ".ll", EC, sys::fs::OF_Text); + raw_fd_ostream Out(M.getModuleIdentifier() + ".ll", EC, + sys::fs::OF_TextWithCRLF); if (EC) { errs() << "Couldn't open " << M.getModuleIdentifier() << " for dumping.\nError:" << EC.message() << "\n"; diff --git a/llvm/tools/llvm-cxxmap/llvm-cxxmap.cpp b/llvm/tools/llvm-cxxmap/llvm-cxxmap.cpp --- a/llvm/tools/llvm-cxxmap/llvm-cxxmap.cpp +++ b/llvm/tools/llvm-cxxmap/llvm-cxxmap.cpp @@ -145,7 +145,7 @@ exitWithErrorCode(RemappingBufOrError.getError(), RemappingFile); std::error_code EC; - raw_fd_ostream OS(OutputFilename.data(), EC, sys::fs::OF_Text); + raw_fd_ostream OS(OutputFilename.data(), EC, sys::fs::OF_TextWithCRLF); if (EC) exitWithErrorCode(EC, OutputFilename); diff --git a/llvm/tools/llvm-dis/llvm-dis.cpp b/llvm/tools/llvm-dis/llvm-dis.cpp --- a/llvm/tools/llvm-dis/llvm-dis.cpp +++ b/llvm/tools/llvm-dis/llvm-dis.cpp @@ -203,7 +203,7 @@ std::error_code EC; std::unique_ptr Out( - new ToolOutputFile(FinalFilename, EC, sys::fs::OF_Text)); + new ToolOutputFile(FinalFilename, EC, sys::fs::OF_TextWithCRLF)); if (EC) { errs() << EC.message() << '\n'; return 1; diff --git a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp --- a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -628,7 +628,7 @@ } std::error_code EC; - ToolOutputFile OutputFile(OutputFilename, EC, sys::fs::OF_Text); + ToolOutputFile OutputFile(OutputFilename, EC, sys::fs::OF_TextWithCRLF); error("Unable to open output file" + OutputFilename, EC); // Don't remove output file if we exit with an error. OutputFile.keep(); diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp @@ -401,8 +401,9 @@ return Err; } else { int ResultFD = 0; - if (auto E = errorCodeToError(openFileForWrite( - Filename, ResultFD, sys::fs::CD_CreateAlways, sys::fs::OF_Text))) { + if (auto E = errorCodeToError(openFileForWrite(Filename, ResultFD, + sys::fs::CD_CreateAlways, + sys::fs::OF_TextWithCRLF))) { return E; } raw_fd_ostream Ostr(ResultFD, true /*shouldClose*/); diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp --- a/llvm/tools/llvm-link/llvm-link.cpp +++ b/llvm/tools/llvm-link/llvm-link.cpp @@ -468,7 +468,8 @@ std::error_code EC; ToolOutputFile Out(OutputFilename, EC, - OutputAssembly ? sys::fs::OF_Text : sys::fs::OF_None); + OutputAssembly ? sys::fs::OF_TextWithCRLF + : sys::fs::OF_None); if (EC) { WithColor::error() << EC.message() << '\n'; return 1; diff --git a/llvm/tools/llvm-mc/llvm-mc.cpp b/llvm/tools/llvm-mc/llvm-mc.cpp --- a/llvm/tools/llvm-mc/llvm-mc.cpp +++ b/llvm/tools/llvm-mc/llvm-mc.cpp @@ -452,8 +452,9 @@ FeaturesStr = Features.getString(); } - sys::fs::OpenFlags Flags = (FileType == OFT_AssemblyFile) ? sys::fs::OF_Text - : sys::fs::OF_None; + sys::fs::OpenFlags Flags = (FileType == OFT_AssemblyFile) + ? sys::fs::OF_TextWithCRLF + : sys::fs::OF_None; std::unique_ptr Out = GetOutputStream(OutputFilename, Flags); if (!Out) return 1; diff --git a/llvm/tools/llvm-mca/llvm-mca.cpp b/llvm/tools/llvm-mca/llvm-mca.cpp --- a/llvm/tools/llvm-mca/llvm-mca.cpp +++ b/llvm/tools/llvm-mca/llvm-mca.cpp @@ -244,8 +244,8 @@ if (OutputFilename == "") OutputFilename = "-"; std::error_code EC; - auto Out = - std::make_unique(OutputFilename, EC, sys::fs::OF_Text); + auto Out = std::make_unique(OutputFilename, EC, + sys::fs::OF_TextWithCRLF); if (!EC) return std::move(Out); return EC; diff --git a/llvm/tools/llvm-opt-report/OptReport.cpp b/llvm/tools/llvm-opt-report/OptReport.cpp --- a/llvm/tools/llvm-opt-report/OptReport.cpp +++ b/llvm/tools/llvm-opt-report/OptReport.cpp @@ -247,7 +247,7 @@ static bool writeReport(LocationInfoTy &LocationInfo) { std::error_code EC; - llvm::raw_fd_ostream OS(OutputFileName, EC, llvm::sys::fs::OF_Text); + llvm::raw_fd_ostream OS(OutputFileName, EC, llvm::sys::fs::OF_TextWithCRLF); if (EC) { WithColor::error() << "Can't open file " << OutputFileName << ": " << EC.message() << "\n"; diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -306,7 +306,7 @@ InstrProfWriter &Writer) { std::error_code EC; raw_fd_ostream Output(OutputFilename.data(), EC, - OutputFormat == PF_Text ? sys::fs::OF_Text + OutputFormat == PF_Text ? sys::fs::OF_TextWithCRLF : sys::fs::OF_None); if (EC) exitWithErrorCode(EC, OutputFilename); @@ -1931,7 +1931,7 @@ cl::ParseCommandLineOptions(argc, argv, "LLVM profile data overlap tool\n"); std::error_code EC; - raw_fd_ostream OS(Output.data(), EC, sys::fs::OF_Text); + raw_fd_ostream OS(Output.data(), EC, sys::fs::OF_TextWithCRLF); if (EC) exitWithErrorCode(EC, Output); @@ -2457,7 +2457,7 @@ } std::error_code EC; - raw_fd_ostream OS(OutputFilename.data(), EC, sys::fs::OF_Text); + raw_fd_ostream OS(OutputFilename.data(), EC, sys::fs::OF_TextWithCRLF); if (EC) exitWithErrorCode(EC, OutputFilename); diff --git a/llvm/tools/llvm-xray/xray-account.cpp b/llvm/tools/llvm-xray/xray-account.cpp --- a/llvm/tools/llvm-xray/xray-account.cpp +++ b/llvm/tools/llvm-xray/xray-account.cpp @@ -459,7 +459,7 @@ } std::error_code EC; - raw_fd_ostream OS(AccountOutput, EC, sys::fs::OpenFlags::OF_Text); + raw_fd_ostream OS(AccountOutput, EC, sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return make_error( Twine("Cannot open file '") + AccountOutput + "' for writing.", EC); diff --git a/llvm/tools/llvm-xray/xray-converter.cpp b/llvm/tools/llvm-xray/xray-converter.cpp --- a/llvm/tools/llvm-xray/xray-converter.cpp +++ b/llvm/tools/llvm-xray/xray-converter.cpp @@ -381,7 +381,7 @@ raw_fd_ostream OS(ConvertOutput, EC, ConvertOutputFormat == ConvertFormats::BINARY ? sys::fs::OpenFlags::OF_None - : sys::fs::OpenFlags::OF_Text); + : sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return make_error( Twine("Cannot open file '") + ConvertOutput + "' for writing.", EC); diff --git a/llvm/tools/llvm-xray/xray-extract.cpp b/llvm/tools/llvm-xray/xray-extract.cpp --- a/llvm/tools/llvm-xray/xray-extract.cpp +++ b/llvm/tools/llvm-xray/xray-extract.cpp @@ -83,7 +83,7 @@ InstrumentationMapOrError.takeError()); std::error_code EC; - raw_fd_ostream OS(ExtractOutput, EC, sys::fs::OpenFlags::OF_Text); + raw_fd_ostream OS(ExtractOutput, EC, sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return make_error( Twine("Cannot open file '") + ExtractOutput + "' for writing.", EC); diff --git a/llvm/tools/llvm-xray/xray-graph-diff.cpp b/llvm/tools/llvm-xray/xray-graph-diff.cpp --- a/llvm/tools/llvm-xray/xray-graph-diff.cpp +++ b/llvm/tools/llvm-xray/xray-graph-diff.cpp @@ -456,7 +456,7 @@ auto &GDR = *GDROrErr; std::error_code EC; - raw_fd_ostream OS(GraphDiffOutput, EC, sys::fs::OpenFlags::OF_Text); + raw_fd_ostream OS(GraphDiffOutput, EC, sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return make_error( Twine("Cannot open file '") + GraphDiffOutput + "' for writing.", EC); diff --git a/llvm/tools/llvm-xray/xray-graph.cpp b/llvm/tools/llvm-xray/xray-graph.cpp --- a/llvm/tools/llvm-xray/xray-graph.cpp +++ b/llvm/tools/llvm-xray/xray-graph.cpp @@ -523,7 +523,7 @@ auto &GR = *GROrError; std::error_code EC; - raw_fd_ostream OS(GraphOutput, EC, sys::fs::OpenFlags::OF_Text); + raw_fd_ostream OS(GraphOutput, EC, sys::fs::OpenFlags::OF_TextWithCRLF); if (EC) return make_error( Twine("Cannot open file '") + GraphOutput + "' for writing.", EC); diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp --- a/llvm/tools/opt/opt.cpp +++ b/llvm/tools/opt/opt.cpp @@ -700,8 +700,8 @@ OutputFilename = "-"; std::error_code EC; - sys::fs::OpenFlags Flags = OutputAssembly ? sys::fs::OF_Text - : sys::fs::OF_None; + sys::fs::OpenFlags Flags = + OutputAssembly ? sys::fs::OF_TextWithCRLF : sys::fs::OF_None; Out.reset(new ToolOutputFile(OutputFilename, EC, Flags)); if (EC) { errs() << EC.message() << '\n'; diff --git a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp --- a/llvm/tools/verify-uselistorder/verify-uselistorder.cpp +++ b/llvm/tools/verify-uselistorder/verify-uselistorder.cpp @@ -136,7 +136,7 @@ bool TempFile::writeAssembly(const Module &M) const { LLVM_DEBUG(dbgs() << " - write assembly\n"); std::error_code EC; - raw_fd_ostream OS(Filename, EC, sys::fs::OF_Text); + raw_fd_ostream OS(Filename, EC, sys::fs::OF_TextWithCRLF); if (EC) { errs() << "verify-uselistorder: error: " << EC.message() << "\n"; return true; diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -1253,7 +1253,7 @@ path::append(FilePathname, "test"); { - raw_fd_ostream File(FilePathname, EC, sys::fs::OF_Text); + raw_fd_ostream File(FilePathname, EC, sys::fs::OF_TextWithCRLF); ASSERT_NO_ERROR(EC); File << '\n'; } diff --git a/polly/lib/Exchange/JSONExporter.cpp b/polly/lib/Exchange/JSONExporter.cpp --- a/polly/lib/Exchange/JSONExporter.cpp +++ b/polly/lib/Exchange/JSONExporter.cpp @@ -178,7 +178,7 @@ // Write to file. std::error_code EC; - ToolOutputFile F(FileName, EC, llvm::sys::fs::OF_Text); + ToolOutputFile F(FileName, EC, llvm::sys::fs::OF_TextWithCRLF); std::string FunctionName = S.getFunction().getName().str(); errs() << "Writing JScop '" << S.getNameStr() << "' in function '"