MC/Mach-O: Implement "absolutizing" semantics of .set, by evaluating the assembly time value of variables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98241 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp
index 21feeed..8d0075e 100644
--- a/lib/MC/MCAssembler.cpp
+++ b/lib/MC/MCAssembler.cpp
@@ -539,10 +539,10 @@
     if (Target.isAbsolute()) { // constant
       // SymbolNum of 0 indicates the absolute section.
       //
-      // FIXME: When is this generated?
+      // FIXME: Currently, these are never generated (see code below). I cannot
+      // find a case where they are actually emitted.
       Type = RIT_Vanilla;
       Value = 0;
-      llvm_unreachable("FIXME: Not yet implemented!");
     } else {
       const MCSymbol *Symbol = Target.getSymA();
       MCSymbolData *SD = &Asm.getSymbolData(*Symbol);
@@ -572,6 +572,12 @@
     if (IsPCRel)
       Fixup.FixedValue -= Address;
 
+    // If the target evaluates to a constant, we don't need a relocation. This
+    // occurs with absolutized expressions which are not resolved to constants
+    // until after relaxation.
+    if (Target.isAbsolute())
+      return;
+
     // If this fixup is a vanilla PC relative relocation for a local label, we
     // don't need a relocation.
     //