aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-03-07 00:30:40 +0000
committerChad Rosier <mcrosier@apple.com>2012-03-07 00:30:40 +0000
commit8ba9a6244c56b19bc2a24de5d0c32ff37d50177b (patch)
treec28df0b2216e2ceaea259715a7987e435719be7a
parent8b8d9534f185743fb72c59d4e735794e6e0f4335 (diff)
[driver] Don't try to generate diagnostic information for linker crashes.
rdar://10993648 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152180 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Driver/Tool.h1
-rw-r--r--lib/Driver/Driver.cpp4
-rw-r--r--lib/Driver/Tools.h12
3 files changed, 17 insertions, 0 deletions
diff --git a/include/clang/Driver/Tool.h b/include/clang/Driver/Tool.h
index 378b516b39..8822d7b3fe 100644
--- a/include/clang/Driver/Tool.h
+++ b/include/clang/Driver/Tool.h
@@ -49,6 +49,7 @@ public:
virtual bool hasIntegratedAssembler() const { return false; }
virtual bool hasIntegratedCPP() const = 0;
+ virtual bool isLinkJob() const { return false; }
/// \brief Does this tool have "good" standardized diagnostics, or should the
/// driver add an additional "command failed" diagnostic on failures.
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index a2e2b0a1c0..c985e2fcfc 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -375,6 +375,10 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
void Driver::generateCompilationDiagnostics(Compilation &C,
const Command *FailingCommand) {
if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics))
+ return;
+
+ // Don't try to generate diagnostics for link jobs.
+ if (FailingCommand->getCreator().isLinkJob())
return;
Diag(clang::diag::note_drv_command_failed_diag_msg)
diff --git a/lib/Driver/Tools.h b/lib/Driver/Tools.h
index 8f451afc7d..651a8f2963 100644
--- a/lib/Driver/Tools.h
+++ b/lib/Driver/Tools.h
@@ -148,6 +148,7 @@ namespace gcc {
"linker (via gcc)", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void RenderExtraToolArgs(const JobAction &JA,
ArgStringList &CmdArgs) const;
@@ -179,6 +180,7 @@ namespace hexagon {
"hexagon-ld", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void RenderExtraToolArgs(const JobAction &JA,
ArgStringList &CmdArgs) const;
@@ -285,6 +287,7 @@ namespace darwin {
Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -356,6 +359,7 @@ namespace openbsd {
Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -385,6 +389,7 @@ namespace freebsd {
Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -417,6 +422,7 @@ namespace netbsd {
: Tool("netbsd::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -446,6 +452,7 @@ namespace linuxtools {
Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -474,6 +481,7 @@ namespace minix {
Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -503,6 +511,7 @@ namespace solaris {
Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -532,6 +541,7 @@ namespace auroraux {
Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -561,6 +571,7 @@ namespace dragonfly {
Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
@@ -577,6 +588,7 @@ namespace visualstudio {
Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
virtual bool hasIntegratedCPP() const { return false; }
+ virtual bool isLinkJob() const { return true; }
virtual void ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,