Fix symbol value computation when part of the expression is weak.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 20 Aug 2015 16:18:30 +0000 (16:18 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 20 Aug 2015 16:18:30 +0000 (16:18 +0000)
This matches the behaviour of the gnu assembler and is part of
fixing pr24486.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245576 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCAssembler.cpp
test/MC/X86/expand-var.s

index 4ec81b3c3bb0737c677e852767a66bde611bed3b..09a27fec986047211c383a39934441fdaffcf925 100644 (file)
@@ -137,7 +137,7 @@ static bool getSymbolOffsetImpl(const MCAsmLayout &Layout, const MCSymbol &S,
 
   // If SD is a variable, evaluate it.
   MCValue Target;
 
   // If SD is a variable, evaluate it.
   MCValue Target;
-  if (!S.getVariableValue()->evaluateAsRelocatable(Target, &Layout, nullptr))
+  if (!S.getVariableValue()->evaluateAsValue(Target, Layout))
     report_fatal_error("unable to evaluate offset for variable '" +
                        S.getName() + "'");
 
     report_fatal_error("unable to evaluate offset for variable '" +
                        S.getName() + "'");
 
index 8d5529a9a469eaaefa64e95e7746130e5613a215..d9b8bb9394a46c3044a6f005f80282bef3f893e7 100644 (file)
@@ -1,9 +1,13 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux < %s | llvm-readobj -r | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux < %s | llvm-readobj -r -t | FileCheck %s
 
 // CHECK:       Section {{.*}} .rela.text {
 // CHECK-NEXT:    0x0 R_X86_64_32 d 0x0
 // CHECK-NEXT:  }
 
 
 // CHECK:       Section {{.*}} .rela.text {
 // CHECK-NEXT:    0x0 R_X86_64_32 d 0x0
 // CHECK-NEXT:  }
 
+// CHECK:      Symbol {
+// CHECK:        Name:  d2
+// CHECK-NEXT:   Value: 0x2A
+
 a:
         b = a
         c = a
 a:
         b = a
         c = a
@@ -16,3 +20,4 @@ a2:
         .weak b2
         b2 = a2
         c2 = b2 - a2
         .weak b2
         b2 = a2
         c2 = b2 - a2
+        d2 = b2 - a2 + 42