Skip to content

Commit bee5a1d

Browse files
author
Chad Rosier
committed
[driver] Don't try to generate diagnostic information for linker crashes.
rdar://10993648 llvm-svn: 152180
1 parent edbb3b2 commit bee5a1d

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

clang/include/clang/Driver/Tool.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class Tool {
4949

5050
virtual bool hasIntegratedAssembler() const { return false; }
5151
virtual bool hasIntegratedCPP() const = 0;
52+
virtual bool isLinkJob() const { return false; }
5253

5354
/// \brief Does this tool have "good" standardized diagnostics, or should the
5455
/// driver add an additional "command failed" diagnostic on failures.

clang/lib/Driver/Driver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,10 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
375375
void Driver::generateCompilationDiagnostics(Compilation &C,
376376
const Command *FailingCommand) {
377377
if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics))
378+
return;
379+
380+
// Don't try to generate diagnostics for link jobs.
381+
if (FailingCommand->getCreator().isLinkJob())
378382
return;
379383

380384
Diag(clang::diag::note_drv_command_failed_diag_msg)

clang/lib/Driver/Tools.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ namespace gcc {
148148
"linker (via gcc)", TC) {}
149149

150150
virtual bool hasIntegratedCPP() const { return false; }
151+
virtual bool isLinkJob() const { return true; }
151152

152153
virtual void RenderExtraToolArgs(const JobAction &JA,
153154
ArgStringList &CmdArgs) const;
@@ -179,6 +180,7 @@ namespace hexagon {
179180
"hexagon-ld", TC) {}
180181

181182
virtual bool hasIntegratedCPP() const { return false; }
183+
virtual bool isLinkJob() const { return true; }
182184

183185
virtual void RenderExtraToolArgs(const JobAction &JA,
184186
ArgStringList &CmdArgs) const;
@@ -285,6 +287,7 @@ namespace darwin {
285287
Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
286288

287289
virtual bool hasIntegratedCPP() const { return false; }
290+
virtual bool isLinkJob() const { return true; }
288291

289292
virtual void ConstructJob(Compilation &C, const JobAction &JA,
290293
const InputInfo &Output,
@@ -356,6 +359,7 @@ namespace openbsd {
356359
Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
357360

358361
virtual bool hasIntegratedCPP() const { return false; }
362+
virtual bool isLinkJob() const { return true; }
359363

360364
virtual void ConstructJob(Compilation &C, const JobAction &JA,
361365
const InputInfo &Output,
@@ -385,6 +389,7 @@ namespace freebsd {
385389
Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
386390

387391
virtual bool hasIntegratedCPP() const { return false; }
392+
virtual bool isLinkJob() const { return true; }
388393

389394
virtual void ConstructJob(Compilation &C, const JobAction &JA,
390395
const InputInfo &Output,
@@ -417,6 +422,7 @@ namespace netbsd {
417422
: Tool("netbsd::Link", "linker", TC) {}
418423

419424
virtual bool hasIntegratedCPP() const { return false; }
425+
virtual bool isLinkJob() const { return true; }
420426

421427
virtual void ConstructJob(Compilation &C, const JobAction &JA,
422428
const InputInfo &Output,
@@ -446,6 +452,7 @@ namespace linuxtools {
446452
Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
447453

448454
virtual bool hasIntegratedCPP() const { return false; }
455+
virtual bool isLinkJob() const { return true; }
449456

450457
virtual void ConstructJob(Compilation &C, const JobAction &JA,
451458
const InputInfo &Output,
@@ -474,6 +481,7 @@ namespace minix {
474481
Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
475482

476483
virtual bool hasIntegratedCPP() const { return false; }
484+
virtual bool isLinkJob() const { return true; }
477485

478486
virtual void ConstructJob(Compilation &C, const JobAction &JA,
479487
const InputInfo &Output,
@@ -503,6 +511,7 @@ namespace solaris {
503511
Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
504512

505513
virtual bool hasIntegratedCPP() const { return false; }
514+
virtual bool isLinkJob() const { return true; }
506515

507516
virtual void ConstructJob(Compilation &C, const JobAction &JA,
508517
const InputInfo &Output,
@@ -532,6 +541,7 @@ namespace auroraux {
532541
Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
533542

534543
virtual bool hasIntegratedCPP() const { return false; }
544+
virtual bool isLinkJob() const { return true; }
535545

536546
virtual void ConstructJob(Compilation &C, const JobAction &JA,
537547
const InputInfo &Output,
@@ -561,6 +571,7 @@ namespace dragonfly {
561571
Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
562572

563573
virtual bool hasIntegratedCPP() const { return false; }
574+
virtual bool isLinkJob() const { return true; }
564575

565576
virtual void ConstructJob(Compilation &C, const JobAction &JA,
566577
const InputInfo &Output,
@@ -577,6 +588,7 @@ namespace visualstudio {
577588
Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
578589

579590
virtual bool hasIntegratedCPP() const { return false; }
591+
virtual bool isLinkJob() const { return true; }
580592

581593
virtual void ConstructJob(Compilation &C, const JobAction &JA,
582594
const InputInfo &Output,

0 commit comments

Comments
 (0)