From: Chad Rosier Date: Wed, 20 Jul 2011 21:16:17 +0000 (+0000) Subject: Temporarily revert r135614 while I fix the cmake build. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7a3ba03f69892aac02e0771eb2e6d1b7b1d1267;p=clang Temporarily revert r135614 while I fix the cmake build. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135621 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index f76af053d9..e33b67ef7a 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -123,7 +123,4 @@ def warn_drv_objc_gc_unsupported : Warning< def warn_drv_pch_not_first_include : Warning< "precompiled header '%0' was ignored because '%1' is not first '-include'">; -def note_drv_command_failed_diag_msg : Note< - "diagnostic msg: %0">; - } diff --git a/include/clang/Driver/ArgList.h b/include/clang/Driver/ArgList.h index b31eea5b5b..617561b0f6 100644 --- a/include/clang/Driver/ArgList.h +++ b/include/clang/Driver/ArgList.h @@ -149,13 +149,6 @@ namespace driver { return arg_iterator(Args.end(), *this); } - /// @} - /// @name Arg Removal - /// @{ - - /// eraseArg - Remove any option matching \arg Id. - void eraseArg(OptSpecifier Id); - /// @} /// @name Arg Access /// @{ @@ -249,10 +242,6 @@ namespace driver { /// option id. void ClaimAllArgs(OptSpecifier Id0) const; - /// ClaimAllArgs - Claim all arguments. - /// - void ClaimAllArgs() const; - /// @} /// @name Arg Synthesis /// @{ diff --git a/include/clang/Driver/Compilation.h b/include/clang/Driver/Compilation.h index 8c9990909e..4f69d0a420 100644 --- a/include/clang/Driver/Compilation.h +++ b/include/clang/Driver/Compilation.h @@ -13,7 +13,6 @@ #include "clang/Driver/Job.h" #include "clang/Driver/Util.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/Support/Path.h" namespace clang { namespace driver { @@ -56,9 +55,6 @@ class Compilation { /// Result files which should be removed on failure. ArgStringList ResultFiles; - /// Redirection for stdout, stderr, etc. - const llvm::sys::Path **Redirects; - public: Compilation(const Driver &D, const ToolChain &DefaultToolChain, InputArgList *Args, DerivedArgList *TranslatedArgs); @@ -135,11 +131,6 @@ public: /// Command which failed. /// \return The accumulated result code of the job. int ExecuteJob(const Job &J, const Command *&FailingCommand) const; - - /// initCompilationForDiagnostics - Remove stale state and suppress output - /// so compilation can be reexecuted to generate additional diagnostic - /// information (e.g., preprocessed source(s)). - void initCompilationForDiagnostics(); }; } // end namespace driver diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index e1e2ad7f4b..1af572a5bd 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -30,7 +30,6 @@ namespace clang { namespace driver { class Action; class ArgList; - class Command; class Compilation; class DerivedArgList; class HostInfo; @@ -134,9 +133,6 @@ public: /// format. unsigned CCLogDiagnostics : 1; - /// Whether the driver is generating diagnostics for debugging purposes. - unsigned CCGenDiagnostics : 1; - private: /// Name to use when invoking gcc/g++. std::string CCCGenericGCCName; @@ -266,14 +262,7 @@ public: /// This routine handles additional processing that must be done in addition /// to just running the subprocesses, for example reporting errors, removing /// temporary files, etc. - int ExecuteCompilation(const Compilation &C, - const Command *&FailingCommand) const; - - /// generateCompilationDiagnostics - Generate diagnostics information - /// including preprocessed source file(s). - /// - void generateCompilationDiagnostics(Compilation &C, - const Command *FailingCommand); + int ExecuteCompilation(const Compilation &C) const; /// @} /// @name Helper Methods diff --git a/include/clang/Driver/Job.h b/include/clang/Driver/Job.h index 367955f59f..f2b6357dfb 100644 --- a/include/clang/Driver/Job.h +++ b/include/clang/Driver/Job.h @@ -97,9 +97,6 @@ public: /// Add a job to the list (taking ownership). void addJob(Job *J) { Jobs.push_back(J); } - /// Clear the job list. - void clear(); - const list_type &getJobs() const { return Jobs; } size_type size() const { return Jobs.size(); } diff --git a/lib/Driver/ArgList.cpp b/lib/Driver/ArgList.cpp index 30225fccb5..b8af9cc47e 100644 --- a/lib/Driver/ArgList.cpp +++ b/lib/Driver/ArgList.cpp @@ -46,16 +46,6 @@ void ArgList::append(Arg *A) { Args.push_back(A); } -void ArgList::eraseArg(OptSpecifier Id) { - for (iterator it = begin(), ie = end(); it != ie; ++it) { - if ((*it)->getOption().matches(Id)) { - Args.erase(it); - it = begin(); - ie = end(); - } - } -} - Arg *ArgList::getLastArgNoClaim(OptSpecifier Id) const { // FIXME: Make search efficient? for (const_reverse_iterator it = rbegin(), ie = rend(); it != ie; ++it) @@ -202,12 +192,6 @@ void ArgList::ClaimAllArgs(OptSpecifier Id0) const { (*it)->claim(); } -void ArgList::ClaimAllArgs() const { - for (const_iterator it = begin(), ie = end(); it != ie; ++it) - if (!(*it)->isClaimed()) - (*it)->claim(); -} - const char *ArgList::MakeArgString(const llvm::Twine &T) const { llvm::SmallString<256> Str; T.toVector(Str); diff --git a/lib/Driver/Compilation.cpp b/lib/Driver/Compilation.cpp index b0e46ff5ae..2657faa0d3 100644 --- a/lib/Driver/Compilation.cpp +++ b/lib/Driver/Compilation.cpp @@ -25,7 +25,7 @@ using namespace clang::driver; Compilation::Compilation(const Driver &D, const ToolChain &_DefaultToolChain, InputArgList *_Args, DerivedArgList *_TranslatedArgs) : TheDriver(D), DefaultToolChain(_DefaultToolChain), Args(_Args), - TranslatedArgs(_TranslatedArgs), Redirects(0) { + TranslatedArgs(_TranslatedArgs) { } Compilation::~Compilation() { @@ -43,13 +43,6 @@ Compilation::~Compilation() { for (ActionList::iterator it = Actions.begin(), ie = Actions.end(); it != ie; ++it) delete *it; - - // Free redirections of stdout/stderr. - if (Redirects) { - delete Redirects[1]; - delete Redirects[2]; - delete Redirects; - } } const DerivedArgList &Compilation::getArgsForToolChain(const ToolChain *TC, @@ -142,8 +135,8 @@ int Compilation::ExecuteCommand(const Command &C, std::copy(C.getArguments().begin(), C.getArguments().end(), Argv+1); Argv[C.getArguments().size() + 1] = 0; - if ((getDriver().CCCEcho || getDriver().CCPrintOptions || - getArgs().hasArg(options::OPT_v)) && !getDriver().CCGenDiagnostics) { + if (getDriver().CCCEcho || getDriver().CCPrintOptions || + getArgs().hasArg(options::OPT_v)) { llvm::raw_ostream *OS = &llvm::errs(); // Follow gcc implementation of CC_PRINT_OPTIONS; we could also cache the @@ -174,7 +167,7 @@ int Compilation::ExecuteCommand(const Command &C, std::string Error; int Res = llvm::sys::Program::ExecuteAndWait(Prog, Argv, - /*env*/0, Redirects, + /*env*/0, /*redirects*/0, /*secondsToWait*/0, /*memoryLimit*/0, &Error); if (!Error.empty()) { @@ -202,27 +195,3 @@ int Compilation::ExecuteJob(const Job &J, return 0; } } - -void Compilation::initCompilationForDiagnostics(void) { - // Free actions and jobs, if built. - for (ActionList::iterator it = Actions.begin(), ie = Actions.end(); - it != ie; ++it) - delete *it; - Actions.clear(); - Jobs.clear(); - - // Clear temporary and results file lists. - TempFiles.clear(); - ResultFiles.clear(); - - // Remove any user specified output. Claim any unclaimed arguments, so as - // to avoid emitting warnings about unused args. - if (TranslatedArgs->hasArg(options::OPT_o)) - TranslatedArgs->eraseArg(options::OPT_o); - TranslatedArgs->ClaimAllArgs(); - - // Redirect stdout/stderr to /dev/null. - Redirects = new const llvm::sys::Path*[3](); - Redirects[1] = new const llvm::sys::Path(); - Redirects[2] = new const llvm::sys::Path(); -} diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index b01e8fca1b..789f6f7ae9 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -60,9 +60,9 @@ Driver::Driver(llvm::StringRef ClangExecutable, CCLogDiagnosticsFilename(0), CCCIsCXX(false), CCCIsCPP(false),CCCEcho(false), CCCPrintBindings(false), CCPrintOptions(false), CCPrintHeaders(false), CCLogDiagnostics(false), - CCGenDiagnostics(false), CCCGenericGCCName(""), CheckInputsExist(true), - CCCUseClang(true), CCCUseClangCXX(true), CCCUseClangCPP(true), - CCCUsePCH(true), SuppressMissingInputWarning(false) { + CCCGenericGCCName(""), CheckInputsExist(true), CCCUseClang(true), + CCCUseClangCXX(true), CCCUseClangCPP(true), CCCUsePCH(true), + SuppressMissingInputWarning(false) { if (IsProduction) { // In a "production" build, only use clang on architectures we expect to // work, and don't use clang C++. @@ -313,63 +313,7 @@ Compilation *Driver::BuildCompilation(llvm::ArrayRef ArgList) { return C; } -// When clang crashes, produce diagnostic information including the fully -// preprocessed source file(s). Request that the developer attach the -// diagnostic information to a bug report. -void Driver::generateCompilationDiagnostics(Compilation &C, - const Command *FailingCommand) { - Diag(clang::diag::note_drv_command_failed_diag_msg) - << "Please submit a bug report to " BUG_REPORT_URL " and include command" - " line arguments and all diagnostic information."; - - // Suppress driver output and emit preprocessor output to temp file. - CCCIsCPP = true; - CCGenDiagnostics = true; - - // Clear stale state and suppress tool output. - C.initCompilationForDiagnostics(); - - // Construct the list of abstract actions to perform for this compilation. - Diags.Reset(); - if (Host->useDriverDriver()) - BuildUniversalActions(C.getDefaultToolChain(), C.getArgs(), - C.getActions()); - else - BuildActions(C.getDefaultToolChain(), C.getArgs(), C.getActions()); - - BuildJobs(C); - - // If there were errors building the compilation, quit now. - if (Diags.hasErrorOccurred()) { - Diag(clang::diag::note_drv_command_failed_diag_msg) - << "Error generating preprocessed source(s)."; - return; - } - - // Generate preprocessed output. - FailingCommand = 0; - int Res = C.ExecuteJob(C.getJobs(), FailingCommand); - - // If the command succeeded, we are done. - if (Res == 0) { - Diag(clang::diag::note_drv_command_failed_diag_msg) - << "Preprocessed source(s) are located at:"; - ArgStringList Files = C.getTempFiles(); - for (ArgStringList::const_iterator it = Files.begin(), ie = Files.end(); - it != ie; ++it) - Diag(clang::diag::note_drv_command_failed_diag_msg) << *it; - } else { - // Failure, remove preprocessed files. - if (!C.getArgs().hasArg(options::OPT_save_temps)) - C.CleanupFileList(C.getTempFiles(), true); - - Diag(clang::diag::note_drv_command_failed_diag_msg) - << "Error generating preprocessed source(s)."; - } -} - -int Driver::ExecuteCompilation(const Compilation &C, - const Command *&FailingCommand) const { +int Driver::ExecuteCompilation(const Compilation &C) const { // Just print if -### was present. if (C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) { C.PrintJob(llvm::errs(), C.getJobs(), "\n", true); @@ -377,9 +321,10 @@ int Driver::ExecuteCompilation(const Compilation &C, } // If there were errors building the compilation, quit now. - if (Diags.hasErrorOccurred()) + if (getDiags().hasErrorOccurred()) return 1; + const Command *FailingCommand = 0; int Res = C.ExecuteJob(C.getJobs(), FailingCommand); // Remove temp files. @@ -1253,7 +1198,7 @@ void Driver::BuildJobsForAction(Compilation &C, A->getType(), BaseInput); } - if (CCCPrintBindings && !CCGenDiagnostics) { + if (CCCPrintBindings) { llvm::errs() << "# \"" << T.getToolChain().getTripleString() << '"' << " - \"" << T.getName() << "\", inputs: ["; for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) { @@ -1280,12 +1225,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, } // Default to writing to stdout? - if (AtTopLevel && isa(JA) && !CCGenDiagnostics) + if (AtTopLevel && isa(JA)) return "-"; // Output to a temporary file? - if ((!AtTopLevel && !C.getArgs().hasArg(options::OPT_save_temps)) || - CCGenDiagnostics) { + if (!AtTopLevel && !C.getArgs().hasArg(options::OPT_save_temps)) { std::string TmpName = GetTemporaryPath(types::getTypeTempSuffix(JA.getType())); return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str())); diff --git a/lib/Driver/Job.cpp b/lib/Driver/Job.cpp index 1cd0abd595..51055e93f5 100644 --- a/lib/Driver/Job.cpp +++ b/lib/Driver/Job.cpp @@ -28,12 +28,6 @@ JobList::~JobList() { delete *it; } -void JobList::clear() { - for (iterator it = begin(), ie = end(); it != ie; ++it) - delete *it; - Jobs.clear(); -} - void Job::addCommand(Command *C) { cast(this)->addJob(C); } diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index c30e55e6a8..c54ced2d1d 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1376,7 +1376,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddAllArgs(CmdArgs, options::OPT_v); Args.AddLastArg(CmdArgs, options::OPT_H); - if (D.CCPrintHeaders && !D.CCGenDiagnostics) { + if (D.CCPrintHeaders) { CmdArgs.push_back("-header-include-file"); CmdArgs.push_back(D.CCPrintHeadersFilename ? D.CCPrintHeadersFilename : "-"); @@ -1384,7 +1384,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddLastArg(CmdArgs, options::OPT_P); Args.AddLastArg(CmdArgs, options::OPT_print_ivar_layout); - if (D.CCLogDiagnostics && !D.CCGenDiagnostics) { + if (D.CCLogDiagnostics) { CmdArgs.push_back("-diagnostic-log-file"); CmdArgs.push_back(D.CCLogDiagnosticsFilename ? D.CCLogDiagnosticsFilename : "-"); diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp index b2f65c9288..ca8982619e 100644 --- a/tools/driver/driver.cpp +++ b/tools/driver/driver.cpp @@ -458,15 +458,9 @@ int main(int argc_, const char **argv_) { llvm::OwningPtr C(TheDriver.BuildCompilation(argv)); int Res = 0; - const Command *FailingCommand = 0; if (C.get()) - Res = TheDriver.ExecuteCompilation(*C, FailingCommand); - - // If result status is < 0, then the driver command signalled an error. - // In this case, generate additional diagnostic information if possible. - if (Res < 0) - TheDriver.generateCompilationDiagnostics(*C, FailingCommand); - + Res = TheDriver.ExecuteCompilation(*C); + // If any timers were active but haven't been destroyed yet, print their // results now. This happens in -disable-free mode. llvm::TimerGroup::printAll(llvm::errs());