From c30c7c493fc8c0678aa7faaa94bd4412895d9a9f Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 20 Aug 2015 16:18:30 +0000 Subject: [PATCH] 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 --- llvm/lib/MC/MCAssembler.cpp | 2 +- llvm/test/MC/X86/expand-var.s | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp index 4ec81b3c3bb0..09a27fec9860 100644 --- a/llvm/lib/MC/MCAssembler.cpp +++ b/llvm/lib/MC/MCAssembler.cpp @@ -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() + "'"); diff --git a/llvm/test/MC/X86/expand-var.s b/llvm/test/MC/X86/expand-var.s index 8d5529a9a469..d9b8bb9394a4 100644 --- a/llvm/test/MC/X86/expand-var.s +++ b/llvm/test/MC/X86/expand-var.s @@ -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