From: Timur Iskhodzhanov Date: Thu, 30 Jan 2014 21:13:05 +0000 (+0000) Subject: Fix PR18381 - print a minimal diagnostic rather than assert on unresolved .secidx... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=4e54e6fe755c54c444687f9d0d2e657982aa8e1c;p=oota-llvm.git Fix PR18381 - print a minimal diagnostic rather than assert on unresolved .secidx target git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200490 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCAssembler.h b/include/llvm/MC/MCAssembler.h index e1cf66d3f9e..0d12a5d5c8d 100644 --- a/include/llvm/MC/MCAssembler.h +++ b/include/llvm/MC/MCAssembler.h @@ -1153,6 +1153,10 @@ public: return *Entry; } + bool hasSymbolData(const MCSymbol &Symbol) const { + return SymbolMap.lookup(&Symbol) != 0; + } + MCSymbolData &getSymbolData(const MCSymbol &Symbol) const { MCSymbolData *Entry = SymbolMap.lookup(&Symbol); assert(Entry && "Missing symbol data!"); diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp index ed19b7ec69d..b68e69f2eb3 100644 --- a/lib/MC/WinCOFFObjectWriter.cpp +++ b/lib/MC/WinCOFFObjectWriter.cpp @@ -636,6 +636,11 @@ void WinCOFFObjectWriter::RecordRelocation(const MCAssembler &Asm, const MCSymbol &Symbol = Target.getSymA()->getSymbol(); const MCSymbol &A = Symbol.AliasedSymbol(); + if (!Asm.hasSymbolData(A)) + Asm.getContext().FatalError( + Fixup.getLoc(), + Twine("symbol '") + A.getName() + "' can not be undefined"); + MCSymbolData &A_SD = Asm.getSymbolData(A); MCSectionData const *SectionData = Fragment->getParent(); diff --git a/test/MC/COFF/secidx-diagnostic.s b/test/MC/COFF/secidx-diagnostic.s new file mode 100644 index 00000000000..3e496c3fd45 --- /dev/null +++ b/test/MC/COFF/secidx-diagnostic.s @@ -0,0 +1,8 @@ +// RUN: not llvm-mc -filetype=obj -triple i686-pc-win32 %s 2>%t +// RUN: FileCheck %s < %t + +// CHECK: symbol 'bar' can not be undefined + +.data +foo: + .secidx bar