Temporarily revert r135614 while I fix the cmake build.

llvm-svn: 135621
This commit is contained in:
Chad Rosier 2011-07-20 21:16:17 +00:00
parent 03400e17fe
commit 1988642124
11 changed files with 18 additions and 170 deletions

View File

@ -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">;
}

View File

@ -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
/// @{

View File

@ -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

View File

@ -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

View File

@ -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(); }

View File

@ -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);

View File

@ -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();
}

View File

@ -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<const char *> 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<PreprocessJobAction>(JA) && !CCGenDiagnostics)
if (AtTopLevel && isa<PreprocessJobAction>(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()));

View File

@ -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<JobList>(this)->addJob(C);
}

View File

@ -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 : "-");

View File

@ -458,15 +458,9 @@ int main(int argc_, const char **argv_) {
llvm::OwningPtr<Compilation> 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());