diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-03-20 21:26:38 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-03-20 21:26:38 +0000 |
commit | 98629c4e4de90380fd3821b7111ff1bd74761ffe (patch) | |
tree | 6895bd6da6a033baeabd6a883526c2c5871048ed /llvm/lib | |
parent | 868d4b312207bf1fe135f0834b5c5623ab90ec5f (diff) | |
download | bcm5719-llvm-98629c4e4de90380fd3821b7111ff1bd74761ffe.tar.gz bcm5719-llvm-98629c4e4de90380fd3821b7111ff1bd74761ffe.zip |
Don't use EmitAbsValue with symbol references.
The function exists to force an expression to be absolute, but there it is not
possible to force a symbol reference since
a = b
.long a
means something else.
This is an alternative fix for pr9951 that uses an assert. It then deletes
the old pr9951 test that was testing nothing already.
llvm-svn: 204399
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCDwarf.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 4 |
2 files changed, 6 insertions, 6 deletions
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index c1e53d7bfe8..79f1312fcaa 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -619,7 +619,7 @@ static void EmitGenDwarfAranges(MCStreamer *MCOS, context.getGenDwarfSectionStartSym(), MCSymbolRefExpr::VK_None, context); const MCExpr *Size = MakeStartMinusEndExpr(*MCOS, *context.getGenDwarfSectionStartSym(), *SectionEndSym, 0); - MCOS->EmitAbsValue(Addr, AddrSize); + MCOS->EmitValue(Addr, AddrSize); MCOS->EmitAbsValue(Size, AddrSize); // And finally the pair of terminating zeros. @@ -682,12 +682,12 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS, // AT_low_pc, the first address of the default .text section. const MCExpr *Start = MCSymbolRefExpr::Create( context.getGenDwarfSectionStartSym(), MCSymbolRefExpr::VK_None, context); - MCOS->EmitAbsValue(Start, AddrSize); + MCOS->EmitValue(Start, AddrSize); // AT_high_pc, the last address of the default .text section. const MCExpr *End = MCSymbolRefExpr::Create( context.getGenDwarfSectionEndSym(), MCSymbolRefExpr::VK_None, context); - MCOS->EmitAbsValue(End, AddrSize); + MCOS->EmitValue(End, AddrSize); // AT_name, the name of the source file. Reconstruct from the first directory // and file table entries. @@ -756,7 +756,7 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS, // AT_low_pc, start address of the label. const MCExpr *AT_low_pc = MCSymbolRefExpr::Create(Entry->getLabel(), MCSymbolRefExpr::VK_None, context); - MCOS->EmitAbsValue(AT_low_pc, AddrSize); + MCOS->EmitValue(AT_low_pc, AddrSize); // DW_AT_prototyped, a one byte flag value of 0 saying we have no prototype. MCOS->EmitIntValue(0, 1); diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 6638fdeb486..0558a58abfd 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -73,8 +73,8 @@ const MCExpr *MCStreamer::BuildSymbolDiff(MCContext &Context, } const MCExpr *MCStreamer::ForceExpAbs(const MCExpr* Expr) { - if (Context.getAsmInfo()->hasAggressiveSymbolFolding() || - isa<MCSymbolRefExpr>(Expr)) + assert(!isa<MCSymbolRefExpr>(Expr)); + if (Context.getAsmInfo()->hasAggressiveSymbolFolding()) return Expr; MCSymbol *ABS = Context.CreateTempSymbol(); |