[llvm] Do not replace dead constant references in metadata with undef
[llvm-project.git] / lld / test / ELF / linkerscript / operators.test
blob8ba8ee7ea41dc7159517913928cca5524013e955
1 # REQUIRES: x86
2 # RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o
3 # RUN: ld.lld %t.o -T %s -o %t
4 # RUN: llvm-nm -p %t | FileCheck %s
6 SECTIONS {
7   _start = .;
8   plus = 1 + 2 + 3;
9   minus = 5 - 1;
10   div = 6 / 2;
11   mod = 20 % 7;
12   mul = 1 + 2 * 3;
13   nospace = 1+2*6/3;
14   braces = 1 + (2 + 3) * 4;
15   and = 0xbb & 0xee;
16   ternary1 = 1 ? 1 : 2;
17   ternary2 = 0 ? 1 : 2;
18   less = 1 < 0 ? 1 : 2;
19   lesseq = 1 <= 1 ? 1 : 2;
20   greater = 0 > 1 ? 1 : 2;
21   greatereq = 1 >= 1 ? 1 : 2;
22   eq = 1 == 1 ? 1 : 2;
23   neq = 1 != 1 ? 1 : 2;
24   plusassign = 1;
25   plusassign += 2;
26   unary = -1 + 3;
27   lshift = 1 << 5;
28   rshift = 0xff >> 3;
29   precedence1 = 1 | 0xff & 1 << 1 + 1 * 2;
30   precedence2 = (1 | (0xff & (1 << (1 + (1 * 2)))));
31   maxpagesize = CONSTANT (MAXPAGESIZE);
32   commonpagesize = CONSTANT (COMMONPAGESIZE);
33   . = 0xfff0;
34   datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0);
35   datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0);
36   _end = .;
37   minus_rel = _end - 0x10;
38   minus_abs = _end - _start;
39   max = MAX(11, 22);
40   min = MIN(11, 22);
41   log2ceil0 = LOG2CEIL(0);
42   log2ceil1 = LOG2CEIL(1);
43   log2ceil2 = LOG2CEIL(2);
44   log2ceil3 = LOG2CEIL(3);
45   log2ceil4 = LOG2CEIL(4);
46   log2ceil100000000 = LOG2CEIL(0x100000000);
47   log2ceil100000001 = LOG2CEIL(0x100000001);
48   log2ceilmax = LOG2CEIL(0xffffffffffffffff);
49   logicaland1 = 0 && 0;
50   logicaland2 = 0 && 1;
51   logicaland3 = 1 && 0;
52   logicaland4 = 1 && 1;
53   logicalor1 = 0 || 0;
54   logicalor2 = 0 || 1;
55   logicalor3 = 1 || 0;
56   logicalor4 = 1 || 1;
59 # CHECK:      00000000000006 A plus
60 # CHECK-NEXT: 00000000000004 A minus
61 # CHECK-NEXT: 00000000000003 A div
62 # CHECK-NEXT: 00000000000006 A mod
63 # CHECK-NEXT: 00000000000007 A mul
64 # CHECK-NEXT: 00000000000005 A nospace
65 # CHECK-NEXT: 00000000000015 A braces
66 # CHECK-NEXT: 000000000000aa A and
67 # CHECK-NEXT: 00000000000001 A ternary1
68 # CHECK-NEXT: 00000000000002 A ternary2
69 # CHECK-NEXT: 00000000000002 A less
70 # CHECK-NEXT: 00000000000001 A lesseq
71 # CHECK-NEXT: 00000000000002 A greater
72 # CHECK-NEXT: 00000000000001 A greatereq
73 # CHECK-NEXT: 00000000000001 A eq
74 # CHECK-NEXT: 00000000000002 A neq
75 # CHECK-NEXT: 00000000000003 A plusassign
76 # CHECK-NEXT: 00000000000002 A unary
77 # CHECK-NEXT: 00000000000020 A lshift
78 # CHECK-NEXT: 0000000000001f A rshift
79 # CHECK-NEXT: 00000000000009 A precedence1
80 # CHECK-NEXT: 00000000000009 A precedence2
81 # CHECK-NEXT: 00000000001000 A maxpagesize
82 # CHECK-NEXT: 00000000001000 A commonpagesize
83 # CHECK-NEXT: 0000000000ffff A datasegmentalign
84 # CHECK-NEXT: 0000000000fff0 A datasegmentalign2
85 # CHECK-NEXT: 0000000000ffe0 T minus_rel
86 # CHECK-NEXT: 0000000000fff0 A minus_abs
87 # CHECK-NEXT: 00000000000016 A max
88 # CHECK-NEXT: 0000000000000b A min
89 # CHECK-NEXT: 0000000000000000 A log2ceil0
90 # CHECK-NEXT: 0000000000000000 A log2ceil1
91 # CHECK-NEXT: 0000000000000001 A log2ceil2
92 # CHECK-NEXT: 0000000000000002 A log2ceil3
93 # CHECK-NEXT: 0000000000000002 A log2ceil4
94 # CHECK-NEXT: 0000000000000020 A log2ceil100000000
95 # CHECK-NEXT: 0000000000000021 A log2ceil100000001
96 # CHECK-NEXT: 0000000000000040 A log2ceilmax
97 # CHECK-NEXT: 00000000000000 A logicaland1
98 # CHECK-NEXT: 00000000000000 A logicaland2
99 # CHECK-NEXT: 00000000000000 A logicaland3
100 # CHECK-NEXT: 00000000000001 A logicaland4
101 # CHECK-NEXT: 00000000000000 A logicalor1
102 # CHECK-NEXT: 00000000000001 A logicalor2
103 # CHECK-NEXT: 00000000000001 A logicalor3
104 # CHECK-NEXT: 00000000000001 A logicalor4
106 ## Mailformed number error.
107 # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script
108 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
109 # RUN:  FileCheck --check-prefix=NUMERR %s
110 # NUMERR: malformed number: 0x12Q41
112 ## Missing closing bracket.
113 # RUN: echo "SECTIONS { . = (1; }" > %t.script
114 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
115 # RUN:  FileCheck --check-prefix=BRACKETERR %s
116 # BRACKETERR: ) expected, but got ;
118 ## Missing opening bracket.
119 # RUN: echo "SECTIONS { . = 1); }" > %t.script
120 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
121 # RUN:  FileCheck --check-prefix=BRACKETERR2 %s
122 # BRACKETERR2: ; expected, but got )
124 ## Empty expression.
125 # RUN: echo "SECTIONS { . = ; }" > %t.script
126 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
127 # RUN:  FileCheck --check-prefix=ERREXPR %s
128 # ERREXPR: malformed number: ;
130 ## Div by zero error.
131 # RUN: echo "SECTIONS { . = 1 / 0; }" > %t.script
132 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
133 # RUN:  FileCheck --check-prefix=DIVZERO %s
134 # DIVZERO: {{.*}}.script:1: division by zero
136 ## Mod by zero error.
137 # RUN: echo "SECTIONS { . = 1 % 0; }" > %t.script
138 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
139 # RUN:  FileCheck --check-prefix=MODZERO %s
140 # MODZERO: {{.*}}.script:1: modulo by zero
142 ## Broken ternary operator expression.
143 # RUN: echo "SECTIONS { . = 1 ? 2; }" > %t.script
144 # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \
145 # RUN:  FileCheck --check-prefix=TERNERR %s
146 # TERNERR: : expected, but got ;