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 5 6SECTIONS { 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 logicaland1 = 0 && 0; 42 logicaland2 = 0 && 1; 43 logicaland3 = 1 && 0; 44 logicaland4 = 1 && 1; 45 logicalor1 = 0 || 0; 46 logicalor2 = 0 || 1; 47 logicalor3 = 1 || 0; 48 logicalor4 = 1 || 1; 49} 50 51# CHECK: 00000000000006 A plus 52# CHECK-NEXT: 00000000000004 A minus 53# CHECK-NEXT: 00000000000003 A div 54# CHECK-NEXT: 00000000000006 A mod 55# CHECK-NEXT: 00000000000007 A mul 56# CHECK-NEXT: 00000000000005 A nospace 57# CHECK-NEXT: 00000000000015 A braces 58# CHECK-NEXT: 000000000000aa A and 59# CHECK-NEXT: 00000000000001 A ternary1 60# CHECK-NEXT: 00000000000002 A ternary2 61# CHECK-NEXT: 00000000000002 A less 62# CHECK-NEXT: 00000000000001 A lesseq 63# CHECK-NEXT: 00000000000002 A greater 64# CHECK-NEXT: 00000000000001 A greatereq 65# CHECK-NEXT: 00000000000001 A eq 66# CHECK-NEXT: 00000000000002 A neq 67# CHECK-NEXT: 00000000000003 A plusassign 68# CHECK-NEXT: 00000000000002 A unary 69# CHECK-NEXT: 00000000000020 A lshift 70# CHECK-NEXT: 0000000000001f A rshift 71# CHECK-NEXT: 00000000000009 A precedence1 72# CHECK-NEXT: 00000000000009 A precedence2 73# CHECK-NEXT: 00000000001000 A maxpagesize 74# CHECK-NEXT: 00000000001000 A commonpagesize 75# CHECK-NEXT: 0000000000ffff A datasegmentalign 76# CHECK-NEXT: 0000000000fff0 A datasegmentalign2 77# CHECK-NEXT: 0000000000ffe0 T minus_rel 78# CHECK-NEXT: 0000000000fff0 A minus_abs 79# CHECK-NEXT: 00000000000016 A max 80# CHECK-NEXT: 0000000000000b A min 81# CHECK-NEXT: 00000000000000 A logicaland1 82# CHECK-NEXT: 00000000000000 A logicaland2 83# CHECK-NEXT: 00000000000000 A logicaland3 84# CHECK-NEXT: 00000000000001 A logicaland4 85# CHECK-NEXT: 00000000000000 A logicalor1 86# CHECK-NEXT: 00000000000001 A logicalor2 87# CHECK-NEXT: 00000000000001 A logicalor3 88# CHECK-NEXT: 00000000000001 A logicalor4 89 90## Mailformed number error. 91# RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script 92# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 93# RUN: FileCheck --check-prefix=NUMERR %s 94# NUMERR: malformed number: 0x12Q41 95 96## Missing closing bracket. 97# RUN: echo "SECTIONS { . = (1; }" > %t.script 98# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 99# RUN: FileCheck --check-prefix=BRACKETERR %s 100# BRACKETERR: ) expected, but got ; 101 102## Missing opening bracket. 103# RUN: echo "SECTIONS { . = 1); }" > %t.script 104# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 105# RUN: FileCheck --check-prefix=BRACKETERR2 %s 106# BRACKETERR2: ; expected, but got ) 107 108## Empty expression. 109# RUN: echo "SECTIONS { . = ; }" > %t.script 110# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 111# RUN: FileCheck --check-prefix=ERREXPR %s 112# ERREXPR: malformed number: ; 113 114## Div by zero error. 115# RUN: echo "SECTIONS { . = 1 / 0; }" > %t.script 116# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 117# RUN: FileCheck --check-prefix=DIVZERO %s 118# DIVZERO: {{.*}}.script:1: division by zero 119 120## Mod by zero error. 121# RUN: echo "SECTIONS { . = 1 % 0; }" > %t.script 122# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 123# RUN: FileCheck --check-prefix=MODZERO %s 124# MODZERO: {{.*}}.script:1: modulo by zero 125 126## Broken ternary operator expression. 127# RUN: echo "SECTIONS { . = 1 ? 2; }" > %t.script 128# RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ 129# RUN: FileCheck --check-prefix=TERNERR %s 130# TERNERR: : expected, but got ; 131