// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t - | FileCheck %s // This tests that types are propagated from symbols to their aliases. Our // behavior is a bit different than gas. If the type of a symbol changes, // gas will update the type of the aliases only if those aliases were declare // at a point in the file where the aliased symbol was already define. // The lines marked with GAS illustrate this difference. .type sym01, @object sym01: .type sym02, @function sym02: sym03 = sym01 sym04 = sym03 .type sym03, @function sym05 = sym03 sym06 = sym01 - sym02 sym07 = sym02 - sym01 sym08 = sym10 sym09 = sym10 + 1 .type sym10, @object sym10: sym11 = sym10 sym12 = sym10 + 1 .type sym10, @function // CHECK: Symbol { // CHECK: Name: sym01 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Object (0x1) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym02 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym03 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym04 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Object (0x1) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym05 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // GAS: Type: Function (0x2) // CHECK-NEXT: Type: Object (0x1) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym06 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: None (0x0) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: Absolute (0xFFF1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym07 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: None (0x0) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: Absolute (0xFFF1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym08 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym09 // CHECK-NEXT: Value: 0x1 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // GAS: Type: None (0x0) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym10 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym11 // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // GAS: Type: Object (0x1) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: sym12 // CHECK-NEXT: Value: 0x1 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // GAS: Type: Object (0x1) // CHECK-NEXT: Type: Function (0x2) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: }