Index: clang/include/clang/Frontend/CompilerInstance.h =================================================================== --- clang/include/clang/Frontend/CompilerInstance.h +++ clang/include/clang/Frontend/CompilerInstance.h @@ -698,15 +698,13 @@ /// The files created by this are usually removed on signal, and, depending /// on FrontendOptions, may also use a temporary file (that is, the data is /// written to a temporary file which will atomically replace the target - /// output on success). If a client (like libclang) needs to disable - /// RemoveFileOnSignal, temporary files will be forced on. + /// output on success). /// /// \return - Null on error. - std::unique_ptr - createDefaultOutputFile(bool Binary = true, StringRef BaseInput = "", - StringRef Extension = "", - bool RemoveFileOnSignal = true, - bool CreateMissingDirectories = false); + std::unique_ptr createDefaultOutputFile( + bool Binary = true, StringRef BaseInput = "", StringRef Extension = "", + bool RemoveFileOnSignal = true, bool CreateMissingDirectories = false, + bool ForceUseTemporary = false); /// Create a new output file, optionally deriving the output path name, and /// add it to the list of tracked output files. Index: clang/lib/Frontend/CompilerInstance.cpp =================================================================== --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -736,11 +736,9 @@ } } -std::unique_ptr -CompilerInstance::createDefaultOutputFile(bool Binary, StringRef InFile, - StringRef Extension, - bool RemoveFileOnSignal, - bool CreateMissingDirectories) { +std::unique_ptr CompilerInstance::createDefaultOutputFile( + bool Binary, StringRef InFile, StringRef Extension, bool RemoveFileOnSignal, + bool CreateMissingDirectories, bool ForceUseTemporary) { StringRef OutputPath = getFrontendOpts().OutputFile; Optional> PathStorage; if (OutputPath.empty()) { @@ -753,9 +751,8 @@ } } - // Force a temporary file if RemoveFileOnSignal was disabled. return createOutputFile(OutputPath, Binary, RemoveFileOnSignal, - getFrontendOpts().UseTemporary || !RemoveFileOnSignal, + getFrontendOpts().UseTemporary || ForceUseTemporary, CreateMissingDirectories); } Index: clang/lib/Frontend/FrontendActions.cpp =================================================================== --- clang/lib/Frontend/FrontendActions.cpp +++ clang/lib/Frontend/FrontendActions.cpp @@ -218,7 +218,8 @@ // Because this is exposed via libclang we must disable RemoveFileOnSignal. return CI.createDefaultOutputFile(/*Binary=*/true, InFile, /*Extension=*/"", /*RemoveFileOnSignal=*/false, - /*CreateMissingDirectories=*/true); + /*CreateMissingDirectories=*/true, + /*ForceUseTemporary=*/true); } bool GenerateModuleInterfaceAction::BeginSourceFileAction(