1// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t - | FileCheck %s
2
3// Test that a variable declared with "var = other_var + cst" is in the same
4// section as other_var and its value is the value of other_var + cst.
5
6        .data
7        .globl	sym_a
8        .size sym_a, 42
9        .byte 42
10        .type sym_a, @object
11sym_a:
12
13// CHECK:       Symbol {
14// CHECK:         Name: sym_a
15// CHECK-NEXT:    Value: 0x1
16// CHECK-NEXT:    Size: 42
17// CHECK-NEXT:    Binding: Global
18// CHECK-NEXT:    Type: Object
19// CHECK-NEXT:    Other: 0
20// CHECK-NEXT:    Section: .data
21// CHECK-NEXT:  }
22
23        .long 42
24        .globl sym_b
25sym_b:
26        .globl sym_c
27sym_c = sym_a
28// CHECK:       Symbol {
29// CHECK:         Name: sym_c
30// CHECK-NEXT:    Value: 0x1
31// CHECK-NEXT:    Size: 42
32// CHECK-NEXT:    Binding: Global
33// CHECK-NEXT:    Type: Object
34// CHECK-NEXT:    Other: 0
35// CHECK-NEXT:    Section: .data
36// CHECK-NEXT:  }
37
38        .globl sym_d
39sym_d = sym_a + 1
40// CHECK:       Symbol {
41// CHECK:         Name: sym_d
42// CHECK-NEXT:    Value: 0x2
43// CHECK-NEXT:    Size: 42
44// CHECK-NEXT:    Binding: Global
45// CHECK-NEXT:    Type: Object
46// CHECK-NEXT:    Other: 0
47// CHECK-NEXT:    Section: .data
48// CHECK-NEXT:  }
49
50        .globl sym_e
51sym_e = sym_a + (sym_b - sym_a) * 3
52// CHECK:       Symbol {
53// CHECK:         Name: sym_e
54// CHECK-NEXT:    Value: 0xD
55// CHECK-NEXT:    Size: 42
56// CHECK-NEXT:    Binding: Global
57// CHECK-NEXT:    Type: Object
58// CHECK-NEXT:    Other: 0
59// CHECK-NEXT:    Section: .data
60// CHECK-NEXT:  }
61
62
63        .globl sym_f
64sym_f = sym_a + (1 - 1)
65// CHECK:       Symbol {
66// CHECK:         Name: sym_f
67// CHECK-NEXT:    Value: 0x1
68// CHECK-NEXT:    Size: 42
69// CHECK-NEXT:    Binding: Global
70// CHECK-NEXT:    Type: Object
71// CHECK-NEXT:    Other: 0
72// CHECK-NEXT:    Section: .data
73// CHECK-NEXT:  }
74
75
76        .globl test2_a
77        .globl test2_b
78        .globl test2_c
79        .globl test2_d
80        .globl test2_e
81test2_a:
82    .long 0
83test2_b = test2_a
84test2_c:
85    .long 0
86test2_d = test2_c
87test2_e = test2_d - test2_b
88// CHECK:      Symbol {
89// CHECK:        Name: test2_a
90// CHECK-NEXT:   Value: 0x5
91// CHECK-NEXT:   Size: 0
92// CHECK-NEXT:   Binding: Global
93// CHECK-NEXT:   Type: None
94// CHECK-NEXT:   Other: 0
95// CHECK-NEXT:   Section: .data
96// CHECK-NEXT: }
97// CHECK-NEXT: Symbol {
98// CHECK-NEXT:   Name: test2_b
99// CHECK-NEXT:   Value: 0x5
100// CHECK-NEXT:   Size: 0
101// CHECK-NEXT:   Binding: Global
102// CHECK-NEXT:   Type: None
103// CHECK-NEXT:   Other: 0
104// CHECK-NEXT:   Section: .data
105// CHECK-NEXT: }
106// CHECK-NEXT: Symbol {
107// CHECK-NEXT:   Name: test2_c
108// CHECK-NEXT:   Value: 0x9
109// CHECK-NEXT:   Size: 0
110// CHECK-NEXT:   Binding: Global
111// CHECK-NEXT:   Type: None
112// CHECK-NEXT:   Other: 0
113// CHECK-NEXT:   Section: .data
114// CHECK-NEXT: }
115// CHECK-NEXT: Symbol {
116// CHECK-NEXT:   Name: test2_d
117// CHECK-NEXT:   Value: 0x9
118// CHECK-NEXT:   Size: 0
119// CHECK-NEXT:   Binding: Global
120// CHECK-NEXT:   Type: None
121// CHECK-NEXT:   Other: 0
122// CHECK-NEXT:   Section: .data
123// CHECK-NEXT: }
124// CHECK-NEXT: Symbol {
125// CHECK-NEXT:   Name: test2_e
126// CHECK-NEXT:   Value: 0x4
127// CHECK-NEXT:   Size: 0
128// CHECK-NEXT:   Binding: Global
129// CHECK-NEXT:   Type: None
130// CHECK-NEXT:   Other: 0
131// CHECK-NEXT:   Section: Absolute
132// CHECK-NEXT: }
133