From: Chad Rosier Date: Wed, 7 Mar 2012 00:30:40 +0000 (+0000) Subject: [driver] Don't try to generate diagnostic information for linker crashes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8ba9a6244c56b19bc2a24de5d0c32ff37d50177b;p=clang [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 --- 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 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,