Fix symbol value computation when part of the expression is weak.

This matches the behaviour of the gnu assembler and is part of
fixing pr24486.

llvm-svn: 245576
This commit is contained in:
Rafael Espindola 2015-08-20 16:18:30 +00:00
parent 58195a2d74
commit c30c7c493f
2 changed files with 7 additions and 2 deletions

View File

@ -137,7 +137,7 @@ static bool getSymbolOffsetImpl(const MCAsmLayout &Layout, const MCSymbol &S,
// 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() + "'");

View 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: Symbol {
// CHECK: Name: d2
// CHECK-NEXT: Value: 0x2A
a:
b = a
c = a
@ -16,3 +20,4 @@ a2:
.weak b2
b2 = a2
c2 = b2 - a2
d2 = b2 - a2 + 42