zahen created this revision. zahen added reviewers: dexonsmith, erik.pilkington. zahen requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When creating a PCH file the use of a temp file will be dictated by the presence or absence of the -fno-temp-file flag. Creating a module file will always use a temp file via the new ForceUseTemporary flag. This design was worked out over email with @dexonsmith. Once accepted I'll need someone to commit this change on my behalf. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D101775 Files: clang/include/clang/Frontend/CompilerInstance.h clang/lib/Frontend/CompilerInstance.cpp clang/lib/Frontend/FrontendActions.cpp 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( Index: clang/lib/Frontend/CompilerInstance.cpp =================================================================== --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -736,11 +736,9 @@ } } -std::unique_ptr<raw_pwrite_stream> -CompilerInstance::createDefaultOutputFile(bool Binary, StringRef InFile, - StringRef Extension, - bool RemoveFileOnSignal, - bool CreateMissingDirectories) { +std::unique_ptr<raw_pwrite_stream> CompilerInstance::createDefaultOutputFile( + bool Binary, StringRef InFile, StringRef Extension, bool RemoveFileOnSignal, + bool CreateMissingDirectories, bool ForceUseTemporary) { StringRef OutputPath = getFrontendOpts().OutputFile; Optional<SmallString<128>> 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/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<raw_pwrite_stream> - createDefaultOutputFile(bool Binary = true, StringRef BaseInput = "", - StringRef Extension = "", - bool RemoveFileOnSignal = true, - bool CreateMissingDirectories = false); + std::unique_ptr<raw_pwrite_stream> 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/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( Index: clang/lib/Frontend/CompilerInstance.cpp =================================================================== --- clang/lib/Frontend/CompilerInstance.cpp +++ clang/lib/Frontend/CompilerInstance.cpp @@ -736,11 +736,9 @@ } } -std::unique_ptr<raw_pwrite_stream> -CompilerInstance::createDefaultOutputFile(bool Binary, StringRef InFile, - StringRef Extension, - bool RemoveFileOnSignal, - bool CreateMissingDirectories) { +std::unique_ptr<raw_pwrite_stream> CompilerInstance::createDefaultOutputFile( + bool Binary, StringRef InFile, StringRef Extension, bool RemoveFileOnSignal, + bool CreateMissingDirectories, bool ForceUseTemporary) { StringRef OutputPath = getFrontendOpts().OutputFile; Optional<SmallString<128>> 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/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<raw_pwrite_stream> - createDefaultOutputFile(bool Binary = true, StringRef BaseInput = "", - StringRef Extension = "", - bool RemoveFileOnSignal = true, - bool CreateMissingDirectories = false); + std::unique_ptr<raw_pwrite_stream> 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.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits