Revert part of r241149, "Fix PR23872: Integrated assembler error message when using...
[oota-llvm.git] / test / MC / ELF / type-propagate.s
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
12 sym01:
13         .type sym02, @function
14 sym02:
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
26 sym10:
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
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
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
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
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
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
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
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
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
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
151 // CHECK-NEXT:  }