[GC] Don't crash when printing the special Discarded GC section.

InputSection<ELFT>::Discarded has no name and it's not backed by
a file. Trying to report it as discared will cause a nullptr
dereference, therefore a crash. Skip it.

Differential Revision:   https://reviews.llvm.org/D24731

llvm-svn: 281946
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index f8b6323..c66126d 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -102,7 +102,8 @@
 }
 
 template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) {
-  if (!Config->PrintGcSections || !IS || IS->Live)
+  if (!Config->PrintGcSections || !IS || IS == &InputSection<ELFT>::Discarded ||
+      IS->Live)
     return;
   errs() << "removing unused section from '" << IS->Name << "' in file '"
          << IS->getFile()->getName() << "'\n";
diff --git a/lld/test/ELF/lto/dynsym.ll b/lld/test/ELF/lto/dynsym.ll
index 5885960..b2b4157 100644
--- a/lld/test/ELF/lto/dynsym.ll
+++ b/lld/test/ELF/lto/dynsym.ll
@@ -5,6 +5,11 @@
 ; RUN: ld.lld -m elf_x86_64 %t2.o %t.so -o %t
 ; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s
 
+; Check that we don't crash when gc'ing sections and printing the result.
+; RUN: ld.lld -m elf_x86_64 %t2.o %t.so --gc-sections --print-gc-sections \
+; RUN:   -o %t
+; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s
+
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"