[ELF] - Do not crash on absolute local symbol starting from ".L".

Absolute local symbols with name staring from ".L" were reason of crash.
The same could happen when using some broken inputs found by AFL.

Patch fixes that.

Differential revision: https://reviews.llvm.org/D25365

llvm-svn: 283731
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index f968c78..1cb47b8 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -337,7 +337,7 @@
   if (Config->Discard == DiscardPolicy::Locals)
     return false;
 
-  return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE);
+  return !Sec || !(Sec->getSectionHdr()->sh_flags & SHF_MERGE);
 }
 
 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) {
diff --git a/lld/test/ELF/local.s b/lld/test/ELF/local.s
index cc879e1..f11f869 100644
--- a/lld/test/ELF/local.s
+++ b/lld/test/ELF/local.s
@@ -1,5 +1,5 @@
 // Check that symbol table is correctly populated with local symbols.
-// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -save-temp-labels -filetype=obj -triple=x86_64-pc-linux %s -o %t
 // RUN: ld.lld %t -o %t1
 // RUN: llvm-readobj -t -s %t1 | FileCheck %s
 // REQUIRES: x86
@@ -14,7 +14,7 @@
 // CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size:
 // CHECK-NEXT:     Link:
-// CHECK-NEXT:     Info: 5
+// CHECK-NEXT:     Info: 6
 
 // CHECK: Symbols [
 // CHECK-NEXT:   Symbol {
@@ -27,6 +27,15 @@
 // CHECK-NEXT:     Section: Undefined
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
+// CHECK-NEXT:     Name: .Labs
+// CHECK-NEXT:     Value: 0x2B
+// CHECK-NEXT:     Size: 0
+// CHECK-NEXT:     Binding: Local
+// CHECK-NEXT:     Type: None
+// CHECK-NEXT:     Other: 0
+// CHECK-NEXT:     Section: Absolute
+// CHECK-NEXT:   }
+// CHECK-NEXT:   Symbol {
 // CHECK-NEXT:     Name: abs
 // CHECK-NEXT:     Value: 0x2A
 // CHECK-NEXT:     Size: 0
@@ -80,3 +89,4 @@
 foo:
 goo:
 abs = 42
+.Labs = 43