diff options
Diffstat (limited to 'contrib/llvm/tools/clang/include/clang/Driver/Compilation.h')
-rw-r--r-- | contrib/llvm/tools/clang/include/clang/Driver/Compilation.h | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h b/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h index 5f63aa7..15c5e40 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h @@ -20,6 +20,7 @@ namespace driver { class DerivedArgList; class Driver; class InputArgList; + class JobAction; class JobList; class ToolChain; @@ -54,11 +55,11 @@ class Compilation { ArgStringList TempFiles; /// Result files which should be removed on failure. - ArgStringList ResultFiles; + ArgStringMap ResultFiles; /// Result files which are generated correctly on failure, and which should /// only be removed if we crash. - ArgStringList FailureResultFiles; + ArgStringMap FailureResultFiles; /// Redirection for stdout, stderr, etc. const llvm::sys::Path **Redirects; @@ -88,9 +89,9 @@ public: const ArgStringList &getTempFiles() const { return TempFiles; } - const ArgStringList &getResultFiles() const { return ResultFiles; } + const ArgStringMap &getResultFiles() const { return ResultFiles; } - const ArgStringList &getFailureResultFiles() const { + const ArgStringMap &getFailureResultFiles() const { return FailureResultFiles; } @@ -113,24 +114,40 @@ public: /// addResultFile - Add a file to remove on failure, and returns its /// argument. - const char *addResultFile(const char *Name) { - ResultFiles.push_back(Name); + const char *addResultFile(const char *Name, const JobAction *JA) { + ResultFiles[JA] = Name; return Name; } /// addFailureResultFile - Add a file to remove if we crash, and returns its /// argument. - const char *addFailureResultFile(const char *Name) { - FailureResultFiles.push_back(Name); + const char *addFailureResultFile(const char *Name, const JobAction *JA) { + FailureResultFiles[JA] = Name; return Name; } + /// CleanupFile - Delete a given file. + /// + /// \param IssueErrors - Report failures as errors. + /// \return Whether the file was removed successfully. + bool CleanupFile(const char *File, bool IssueErrors = false) const; + /// CleanupFileList - Remove the files in the given list. /// /// \param IssueErrors - Report failures as errors. /// \return Whether all files were removed successfully. bool CleanupFileList(const ArgStringList &Files, - bool IssueErrors=false) const; + bool IssueErrors = false) const; + + /// CleanupFileMap - Remove the files in the given map. + /// + /// \param JA - If specified, only delete the files associated with this + /// JobAction. Otherwise, delete all files in the map. + /// \param IssueErrors - Report failures as errors. + /// \return Whether all files were removed successfully. + bool CleanupFileMap(const ArgStringMap &Files, + const JobAction *JA, + bool IssueErrors = false) const; /// PrintJob - Print one job in -### format. /// @@ -158,10 +175,10 @@ public: /// ExecuteJob - Execute a single job. /// - /// \param FailingCommand - For non-zero results, this will be set to the - /// Command which failed. - /// \return The accumulated result code of the job. - int ExecuteJob(const Job &J, const Command *&FailingCommand) const; + /// \param FailingCommands - For non-zero results, this will be a vector of + /// failing commands and their associated result code. + void ExecuteJob(const Job &J, + SmallVectorImpl< std::pair<int, const Command *> > &FailingCommands) const; /// initCompilationForDiagnostics - Remove stale state and suppress output /// so compilation can be reexecuted to generate additional diagnostic |