diff --git a/COFF/PDB.cpp b/COFF/PDB.cpp
index 400def8..81b0e36 100644
--- a/COFF/PDB.cpp
+++ b/COFF/PDB.cpp
@@ -1791,8 +1791,8 @@
 // Use CodeView line tables to resolve a file and line number for the given
 // offset into the given chunk and return them, or {"", 0} if a line table was
 // not found.
-std::pair<StringRef, uint32_t> getFileLineCodeView(const SectionChunk *c,
-                                                         uint32_t addr) {
+Optional<std::pair<StringRef, uint32_t>>
+getFileLineCodeView(const SectionChunk *c, uint32_t addr) {
   ExitOnError exitOnErr;
 
   DebugStringTableSubsectionRef cVStrTab;
@@ -1801,7 +1801,7 @@
   uint32_t offsetInLinetable;
 
   if (!findLineTable(c, addr, cVStrTab, checksums, lines, offsetInLinetable))
-    return {"", 0};
+    return None;
 
   Optional<uint32_t> nameIndex;
   Optional<uint32_t> lineNumber;
@@ -1815,16 +1815,16 @@
         }
         StringRef filename =
             exitOnErr(getFileName(cVStrTab, checksums, *nameIndex));
-        return {filename, *lineNumber};
+        return std::make_pair(filename, *lineNumber);
       }
       nameIndex = entry.NameIndex;
       lineNumber = li.getStartLine();
     }
   }
   if (!nameIndex)
-    return {"", 0};
+    return None;
   StringRef filename = exitOnErr(getFileName(cVStrTab, checksums, *nameIndex));
-  return {filename, *lineNumber};
+  return std::make_pair(filename, *lineNumber);
 }
 
 } // namespace coff
diff --git a/COFF/PDB.h b/COFF/PDB.h
index 4d8e3e2..273609e 100644
--- a/COFF/PDB.h
+++ b/COFF/PDB.h
@@ -10,6 +10,7 @@
 #define LLD_COFF_PDB_H
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
 
 namespace llvm {
@@ -29,9 +30,9 @@
                llvm::ArrayRef<uint8_t> sectionTable,
                llvm::codeview::DebugInfo *buildId);
 
-std::pair<llvm::StringRef, uint32_t> getFileLineCodeView(const SectionChunk *c,
-                                                         uint32_t addr);
-}
-}
+llvm::Optional<std::pair<llvm::StringRef, uint32_t>>
+getFileLineCodeView(const SectionChunk *c, uint32_t addr);
+} // namespace coff
+} // namespace lld
 
 #endif
diff --git a/COFF/SymbolTable.cpp b/COFF/SymbolTable.cpp
index a4aa5d3..61df04e 100644
--- a/COFF/SymbolTable.cpp
+++ b/COFF/SymbolTable.cpp
@@ -108,26 +108,27 @@
   return {res};
 }
 
-static std::pair<StringRef, uint32_t> getFileLineDwarf(const SectionChunk *c,
-                                                       uint32_t addr) {
+static Optional<std::pair<StringRef, uint32_t>>
+getFileLineDwarf(const SectionChunk *c, uint32_t addr) {
   if (!config->symbolizer)
     config->symbolizer = make<symbolize::LLVMSymbolizer>();
   Expected<DILineInfo> expectedLineInfo = config->symbolizer->symbolizeCode(
       *c->file->getCOFFObj(), {addr, c->getSectionNumber() - 1});
   if (!expectedLineInfo)
-    return {"", 0};
+    return None;
   const DILineInfo &lineInfo = *expectedLineInfo;
   if (lineInfo.FileName == DILineInfo::BadString)
-    return {"", 0};
-  return {saver.save(lineInfo.FileName), lineInfo.Line};
+    return None;
+  return std::make_pair(saver.save(lineInfo.FileName), lineInfo.Line);
 }
 
-static std::pair<StringRef, uint32_t> getFileLine(const SectionChunk *c,
-                                                  uint32_t addr) {
+static Optional<std::pair<StringRef, uint32_t>>
+getFileLine(const SectionChunk *c, uint32_t addr) {
   // MinGW can optionally use codeview, even if the default is dwarf.
-  std::pair<StringRef, uint32_t> fileLine = getFileLineCodeView(c, addr);
+  Optional<std::pair<StringRef, uint32_t>> fileLine =
+      getFileLineCodeView(c, addr);
   // If codeview didn't yield any result, check dwarf in MinGW mode.
-  if (fileLine.first.empty() && config->mingw)
+  if (!fileLine && config->mingw)
     fileLine = getFileLineDwarf(c, addr);
   return fileLine;
 }
@@ -150,11 +151,13 @@
     for (const coff_relocation &r : sc->getRelocs()) {
       if (r.SymbolTableIndex != symIndex)
         continue;
-      std::pair<StringRef, uint32_t> fileLine =
+      Optional<std::pair<StringRef, uint32_t>> fileLine =
           getFileLine(sc, r.VirtualAddress);
       Symbol *sym = getSymbol(sc, r.VirtualAddress);
-      if (!fileLine.first.empty() || sym)
-        locations.push_back({sym, fileLine});
+      if (fileLine)
+        locations.push_back({sym, *fileLine});
+      else if (sym)
+        locations.push_back({sym});
     }
   }
 
