summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCAssembler.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2017-06-22 17:25:35 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2017-06-22 17:25:35 +0000
commit8a261c2565b377bd00dee3ac2fe1fa075cb910e4 (patch)
tree0790b7d8bd102c555b213ba603a159dda423b8f9 /llvm/lib/MC/MCAssembler.cpp
parentf677966e2eb5c7fd65a77ec59dc90bcda1c5239d (diff)
downloadbcm5719-llvm-8a261c2565b377bd00dee3ac2fe1fa075cb910e4.tar.gz
bcm5719-llvm-8a261c2565b377bd00dee3ac2fe1fa075cb910e4.zip
Add a common error checking for some invalid expressions.
This refactors a bit of duplicated code and fixes an assertion failure on ELF. llvm-svn: 306035
Diffstat (limited to 'llvm/lib/MC/MCAssembler.cpp')
-rw-r--r--llvm/lib/MC/MCAssembler.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 8ccdd3f5f41..758c4c708f3 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -193,14 +193,23 @@ bool MCAssembler::evaluateFixup(const MCAsmLayout &Layout,
// FIXME: This code has some duplication with recordRelocation. We should
// probably merge the two into a single callback that tries to evaluate a
// fixup and records a relocation if one is needed.
+
+ // On error claim to have completely evaluated the fixup, to prevent any
+ // further processing from being done.
const MCExpr *Expr = Fixup.getValue();
+ MCContext &Ctx = getContext();
+ Value = 0;
if (!Expr->evaluateAsRelocatable(Target, &Layout, &Fixup)) {
- getContext().reportError(Fixup.getLoc(), "expected relocatable expression");
- // Claim to have completely evaluated the fixup, to prevent any further
- // processing from being done.
- Value = 0;
+ Ctx.reportError(Fixup.getLoc(), "expected relocatable expression");
return true;
}
+ if (const MCSymbolRefExpr *RefB = Target.getSymB()) {
+ if (RefB->getKind() != MCSymbolRefExpr::VK_None) {
+ Ctx.reportError(Fixup.getLoc(),
+ "unsupported subtraction of qualified symbol");
+ return true;
+ }
+ }
bool IsPCRel = Backend.getFixupKindInfo(
Fixup.getKind()).Flags & MCFixupKindInfo::FKF_IsPCRel;
OpenPOWER on IntegriCloud