[llvm-commits] [llvm] r97983 - /llvm/trunk/lib/MC/MCAssembler.cpp

Daniel Dunbar daniel at zuster.org
Mon Mar 8 13:10:40 PST 2010


Author: ddunbar
Date: Mon Mar  8 15:10:39 2010
New Revision: 97983

URL: http://llvm.org/viewvc/llvm-project?rev=97983&view=rev
Log:
MC/Mach-O: Error out instead of crashing on invalid scattered relocation expressions.

Modified:
    llvm/trunk/lib/MC/MCAssembler.cpp

Modified: llvm/trunk/lib/MC/MCAssembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=97983&r1=97982&r2=97983&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAssembler.cpp (original)
+++ llvm/trunk/lib/MC/MCAssembler.cpp Mon Mar  8 15:10:39 2010
@@ -447,13 +447,22 @@
     // See <reloc.h>.
     const MCSymbol *A = Target.getSymA();
     MCSymbolData *SD = SymbolMap.lookup(A);
+
+    if (!SD->getFragment())
+      llvm_report_error("symbol '" + A->getName() +
+                        "' can not be undefined in a subtraction expression");
+
     uint32_t Value = SD->getFragment()->getAddress() + SD->getOffset();
     uint32_t Value2 = 0;
 
     if (const MCSymbol *B = Target.getSymB()) {
-      Type = RIT_LocalDifference;
-
       MCSymbolData *SD = SymbolMap.lookup(B);
+
+      if (!SD->getFragment())
+        llvm_report_error("symbol '" + B->getName() +
+                          "' can not be undefined in a subtraction expression");
+
+      Type = RIT_LocalDifference;
       Value2 = SD->getFragment()->getAddress() + SD->getOffset();
     }
 





More information about the llvm-commits mailing list