forked from OSchip/llvm-project
Frontend: Add an explicit RemoveFileOnSignal flag argument, to control the
automatic behavior (which is undesirable in a multithreaded context). llvm-svn: 124612
This commit is contained in:
parent
56cc5fdf09
commit
e326f9bb3e
|
@ -583,7 +583,8 @@ public:
|
||||||
///
|
///
|
||||||
/// \return - Null on error.
|
/// \return - Null on error.
|
||||||
llvm::raw_fd_ostream *
|
llvm::raw_fd_ostream *
|
||||||
createOutputFile(llvm::StringRef OutputPath, bool Binary = true,
|
createOutputFile(llvm::StringRef OutputPath,
|
||||||
|
bool Binary = true, bool RemoveFileOnSignal = true,
|
||||||
llvm::StringRef BaseInput = "",
|
llvm::StringRef BaseInput = "",
|
||||||
llvm::StringRef Extension = "");
|
llvm::StringRef Extension = "");
|
||||||
|
|
||||||
|
@ -600,13 +601,17 @@ public:
|
||||||
/// for deriving the output path.
|
/// for deriving the output path.
|
||||||
/// \param Extension - The extension to use for derived output names.
|
/// \param Extension - The extension to use for derived output names.
|
||||||
/// \param Binary - The mode to open the file in.
|
/// \param Binary - The mode to open the file in.
|
||||||
|
/// \param RemoveFileOnSignal - Whether the file should be registered with
|
||||||
|
/// llvm::sys::RemoveFileOnSignal. Note that this is not safe for
|
||||||
|
/// multithreaded use, as the underlying signal mechanism is not reentrant
|
||||||
/// \param ResultPathName [out] - If given, the result path name will be
|
/// \param ResultPathName [out] - If given, the result path name will be
|
||||||
/// stored here on success.
|
/// stored here on success.
|
||||||
/// \param TempPathName [out] - If given, the temporary file path name
|
/// \param TempPathName [out] - If given, the temporary file path name
|
||||||
/// will be stored here on success.
|
/// will be stored here on success.
|
||||||
static llvm::raw_fd_ostream *
|
static llvm::raw_fd_ostream *
|
||||||
createOutputFile(llvm::StringRef OutputPath, std::string &Error,
|
createOutputFile(llvm::StringRef OutputPath, std::string &Error,
|
||||||
bool Binary = true, llvm::StringRef BaseInput = "",
|
bool Binary = true, bool RemoveFileOnSignal = true,
|
||||||
|
llvm::StringRef BaseInput = "",
|
||||||
llvm::StringRef Extension = "",
|
llvm::StringRef Extension = "",
|
||||||
std::string *ResultPathName = 0,
|
std::string *ResultPathName = 0,
|
||||||
std::string *TempPathName = 0);
|
std::string *TempPathName = 0);
|
||||||
|
|
|
@ -381,16 +381,17 @@ CompilerInstance::createDefaultOutputFile(bool Binary,
|
||||||
llvm::StringRef InFile,
|
llvm::StringRef InFile,
|
||||||
llvm::StringRef Extension) {
|
llvm::StringRef Extension) {
|
||||||
return createOutputFile(getFrontendOpts().OutputFile, Binary,
|
return createOutputFile(getFrontendOpts().OutputFile, Binary,
|
||||||
InFile, Extension);
|
/*RemoveFileOnSignal=*/true, InFile, Extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::raw_fd_ostream *
|
llvm::raw_fd_ostream *
|
||||||
CompilerInstance::createOutputFile(llvm::StringRef OutputPath,
|
CompilerInstance::createOutputFile(llvm::StringRef OutputPath,
|
||||||
bool Binary,
|
bool Binary, bool RemoveFileOnSignal,
|
||||||
llvm::StringRef InFile,
|
llvm::StringRef InFile,
|
||||||
llvm::StringRef Extension) {
|
llvm::StringRef Extension) {
|
||||||
std::string Error, OutputPathName, TempPathName;
|
std::string Error, OutputPathName, TempPathName;
|
||||||
llvm::raw_fd_ostream *OS = createOutputFile(OutputPath, Error, Binary,
|
llvm::raw_fd_ostream *OS = createOutputFile(OutputPath, Error, Binary,
|
||||||
|
RemoveFileOnSignal,
|
||||||
InFile, Extension,
|
InFile, Extension,
|
||||||
&OutputPathName,
|
&OutputPathName,
|
||||||
&TempPathName);
|
&TempPathName);
|
||||||
|
@ -412,6 +413,7 @@ llvm::raw_fd_ostream *
|
||||||
CompilerInstance::createOutputFile(llvm::StringRef OutputPath,
|
CompilerInstance::createOutputFile(llvm::StringRef OutputPath,
|
||||||
std::string &Error,
|
std::string &Error,
|
||||||
bool Binary,
|
bool Binary,
|
||||||
|
bool RemoveFileOnSignal,
|
||||||
llvm::StringRef InFile,
|
llvm::StringRef InFile,
|
||||||
llvm::StringRef Extension,
|
llvm::StringRef Extension,
|
||||||
std::string *ResultPathName,
|
std::string *ResultPathName,
|
||||||
|
@ -455,7 +457,8 @@ CompilerInstance::createOutputFile(llvm::StringRef OutputPath,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Make sure the out stream file gets removed if we crash.
|
// Make sure the out stream file gets removed if we crash.
|
||||||
llvm::sys::RemoveFileOnSignal(llvm::sys::Path(OSFile));
|
if (RemoveFileOnSignal)
|
||||||
|
llvm::sys::RemoveFileOnSignal(llvm::sys::Path(OSFile));
|
||||||
|
|
||||||
if (ResultPathName)
|
if (ResultPathName)
|
||||||
*ResultPathName = OutFile;
|
*ResultPathName = OutFile;
|
||||||
|
|
Loading…
Reference in New Issue