Consider the base pointer for setting the symbol type.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Mar 2014 04:29:51 +0000 (04:29 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Mar 2014 04:29:51 +0000 (04:29 +0000)
This is really a consistency fix. Since given

a = b

we propagate the information, we should propagate it too given

a = b + (1 - 1)

Fixes pr19145.

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

lib/MC/ELFObjectWriter.cpp
test/MC/ELF/offset.s

index 0f3fa04c079d5bbc0f08f59342f62bd7b8969c12..54703b9912b13e0b61f56cbb26287e55a3befa57 100644 (file)
@@ -580,8 +580,9 @@ void ELFObjectWriter::WriteSymbol(MCDataFragment *SymtabF,
                                   ELFSymbolData &MSD,
                                   const MCAsmLayout &Layout) {
   MCSymbolData &OrigData = *MSD.SymbolData;
-  MCSymbolData &Data =
-    Layout.getAssembler().getSymbolData(OrigData.getSymbol().AliasedSymbol());
+  const MCSymbol *Base = OrigData.getSymbol().getBaseSymbol(Layout);
+  const MCSymbolData &Data =
+      Base ? Layout.getAssembler().getSymbolData(*Base) : OrigData;
 
   bool IsReserved = Data.isCommon() || Data.getSymbol().isAbsolute() ||
     Data.getSymbol().isVariable();
index 417a38d1d77c2b3e6cbdfb834690b88786eeed6a..bc4252c1a78d16ef172119eb7d6149ac00fb5c70 100644 (file)
@@ -6,6 +6,7 @@
         .data
         .globl sym_a
         .byte 42
+        .type sym_a, @object
 sym_a:
 
 // CHECK:       Symbol {
@@ -13,7 +14,7 @@ sym_a:
 // CHECK-NEXT:    Value: 0x1
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Global
-// CHECK-NEXT:    Type: None
+// CHECK-NEXT:    Type: Object
 // CHECK-NEXT:    Other: 0
 // CHECK-NEXT:    Section: .data
 // CHECK-NEXT:  }
@@ -28,7 +29,7 @@ sym_c = sym_a
 // CHECK-NEXT:    Value: 0x1
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Global
-// CHECK-NEXT:    Type: None
+// CHECK-NEXT:    Type: Object
 // CHECK-NEXT:    Other: 0
 // CHECK-NEXT:    Section: .data
 // CHECK-NEXT:  }
@@ -40,7 +41,7 @@ sym_d = sym_a + 1
 // CHECK-NEXT:    Value: 0x2
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Global
-// CHECK-NEXT:    Type: None
+// CHECK-NEXT:    Type: Object
 // CHECK-NEXT:    Other: 0
 // CHECK-NEXT:    Section: .data
 // CHECK-NEXT:  }
@@ -52,7 +53,20 @@ sym_e = sym_a + (sym_b - sym_a) * 3
 // CHECK-NEXT:    Value: 0xD
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Global
-// CHECK-NEXT:    Type: None
+// CHECK-NEXT:    Type: Object
+// CHECK-NEXT:    Other: 0
+// CHECK-NEXT:    Section: .data
+// CHECK-NEXT:  }
+
+
+        .globl sym_f
+sym_f = sym_a + (1 - 1)
+// CHECK:       Symbol {
+// CHECK:         Name: sym_f
+// CHECK-NEXT:    Value: 0x1
+// CHECK-NEXT:    Size: 0
+// CHECK-NEXT:    Binding: Global
+// CHECK-NEXT:    Type: Object
 // CHECK-NEXT:    Other: 0
 // CHECK-NEXT:    Section: .data
 // CHECK-NEXT:  }