1// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t - | FileCheck %s
2
3// This tests that types are propagated from symbols to their aliases. Our
4// behavior is a bit different than gas. If the type of a symbol changes,
5// gas will update the type of the aliases only if those aliases were declare
6// at a point in the file where the aliased symbol was already define.
7
8// The lines marked with GAS illustrate this difference.
9
10
11	.type sym01, @object
12sym01:
13	.type sym02, @function
14sym02:
15
16	sym03 = sym01
17	sym04 = sym03
18.type sym03, @function
19	sym05 = sym03
20	sym06 = sym01 - sym02
21	sym07 = sym02 - sym01
22
23	sym08 = sym10
24	sym09 = sym10 + 1
25	.type sym10, @object
26sym10:
27
28	sym11 = sym10
29	sym12 = sym10 + 1
30	.type sym10, @function
31
32// CHECK:       Symbol {
33// CHECK:         Name: sym01
34// CHECK-NEXT:    Value: 0x0
35// CHECK-NEXT:    Size: 0
36// CHECK-NEXT:    Binding: Local (0x0)
37// CHECK-NEXT:    Type: Object (0x1)
38// CHECK-NEXT:    Other: 0
39// CHECK-NEXT:    Section: .text (0x1)
40// CHECK-NEXT:  }
41// CHECK-NEXT:  Symbol {
42// CHECK-NEXT:    Name: sym02
43// CHECK-NEXT:    Value: 0x0
44// CHECK-NEXT:    Size: 0
45// CHECK-NEXT:    Binding: Local (0x0)
46// CHECK-NEXT:    Type: Function (0x2)
47// CHECK-NEXT:    Other: 0
48// CHECK-NEXT:    Section: .text (0x1)
49// CHECK-NEXT:  }
50// CHECK-NEXT:  Symbol {
51// CHECK-NEXT:    Name: sym03
52// CHECK-NEXT:    Value: 0x0
53// CHECK-NEXT:    Size: 0
54// CHECK-NEXT:    Binding: Local (0x0)
55// CHECK-NEXT:    Type: Function (0x2)
56// CHECK-NEXT:    Other: 0
57// CHECK-NEXT:    Section: .text (0x1)
58// CHECK-NEXT:  }
59// CHECK-NEXT:  Symbol {
60// CHECK-NEXT:    Name: sym04
61// CHECK-NEXT:    Value: 0x0
62// CHECK-NEXT:    Size: 0
63// CHECK-NEXT:    Binding: Local (0x0)
64// CHECK-NEXT:    Type: Object (0x1)
65// CHECK-NEXT:    Other: 0
66// CHECK-NEXT:    Section: .text (0x1)
67// CHECK-NEXT:  }
68// CHECK-NEXT:  Symbol {
69// CHECK-NEXT:    Name: sym05
70// CHECK-NEXT:    Value: 0x0
71// CHECK-NEXT:    Size: 0
72// CHECK-NEXT:    Binding: Local (0x0)
73
74// GAS:           Type: Function (0x2)
75// CHECK-NEXT:    Type: Object (0x1)
76
77// CHECK-NEXT:    Other: 0
78// CHECK-NEXT:    Section: .text (0x1)
79// CHECK-NEXT:  }
80// CHECK-NEXT:  Symbol {
81// CHECK-NEXT:    Name: sym06
82// CHECK-NEXT:    Value: 0x0
83// CHECK-NEXT:    Size: 0
84// CHECK-NEXT:    Binding: Local (0x0)
85// CHECK-NEXT:    Type: None (0x0)
86// CHECK-NEXT:    Other: 0
87// CHECK-NEXT:    Section: Absolute (0xFFF1)
88// CHECK-NEXT:  }
89// CHECK-NEXT:  Symbol {
90// CHECK-NEXT:    Name: sym07
91// CHECK-NEXT:    Value: 0x0
92// CHECK-NEXT:    Size: 0
93// CHECK-NEXT:    Binding: Local (0x0)
94// CHECK-NEXT:    Type: None (0x0)
95// CHECK-NEXT:    Other: 0
96// CHECK-NEXT:    Section: Absolute (0xFFF1)
97// CHECK-NEXT:  }
98// CHECK-NEXT:  Symbol {
99// CHECK-NEXT:    Name: sym08
100// CHECK-NEXT:    Value: 0x0
101// CHECK-NEXT:    Size: 0
102// CHECK-NEXT:    Binding: Local (0x0)
103// CHECK-NEXT:    Type: Function (0x2)
104// CHECK-NEXT:    Other: 0
105// CHECK-NEXT:    Section: .text (0x1)
106// CHECK-NEXT:  }
107// CHECK-NEXT:  Symbol {
108// CHECK-NEXT:    Name: sym09
109// CHECK-NEXT:    Value: 0x1
110// CHECK-NEXT:    Size: 0
111// CHECK-NEXT:    Binding: Local (0x0)
112
113// GAS:           Type: None (0x0)
114// CHECK-NEXT:    Type: Function (0x2)
115
116// CHECK-NEXT:    Other: 0
117// CHECK-NEXT:    Section: .text (0x1)
118// CHECK-NEXT:  }
119// CHECK-NEXT:  Symbol {
120// CHECK-NEXT:    Name: sym10
121// CHECK-NEXT:    Value: 0x0
122// CHECK-NEXT:    Size: 0
123// CHECK-NEXT:    Binding: Local (0x0)
124// CHECK-NEXT:    Type: Function (0x2)
125// CHECK-NEXT:    Other: 0
126// CHECK-NEXT:    Section: .text (0x1)
127// CHECK-NEXT:  }
128// CHECK-NEXT:  Symbol {
129// CHECK-NEXT:    Name: sym11
130// CHECK-NEXT:    Value: 0x0
131// CHECK-NEXT:    Size: 0
132// CHECK-NEXT:    Binding: Local (0x0)
133
134// GAS:           Type: Object (0x1)
135// CHECK-NEXT:    Type: Function (0x2)
136
137// CHECK-NEXT:    Other: 0
138// CHECK-NEXT:    Section: .text (0x1)
139// CHECK-NEXT:  }
140// CHECK-NEXT:  Symbol {
141// CHECK-NEXT:    Name: sym12
142// CHECK-NEXT:    Value: 0x1
143// CHECK-NEXT:    Size: 0
144// CHECK-NEXT:    Binding: Local (0x0)
145
146// GAS:           Type: Object (0x1)
147// CHECK-NEXT:    Type: Function (0x2)
148
149// CHECK-NEXT:    Other: 0
150// CHECK-NEXT:    Section: .text (0x1)
151// CHECK-NEXT:  }
152