# REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o # RUN: ld.lld %t.o -T %s -o %t # RUN: llvm-nm -p %t | FileCheck %s SECTIONS { _start = .; plus = 1 + 2 + 3; minus = 5 - 1; div = 6 / 2; mod = 20 % 7; mul = 1 + 2 * 3; nospace = 1+2*6/3; braces = 1 + (2 + 3) * 4; and = 0xbb & 0xee; ternary1 = 1 ? 1 : 2; ternary2 = 0 ? 1 : 2; less = 1 < 0 ? 1 : 2; lesseq = 1 <= 1 ? 1 : 2; greater = 0 > 1 ? 1 : 2; greatereq = 1 >= 1 ? 1 : 2; eq = 1 == 1 ? 1 : 2; neq = 1 != 1 ? 1 : 2; plusassign = 1; plusassign += 2; unary = -1 + 3; lshift = 1 << 5; rshift = 0xff >> 3; precedence1 = 1 | 0xff & 1 << 1 + 1 * 2; precedence2 = (1 | (0xff & (1 << (1 + (1 * 2))))); maxpagesize = CONSTANT (MAXPAGESIZE); commonpagesize = CONSTANT (COMMONPAGESIZE); . = 0xfff0; datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0); datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0); _end = .; minus_rel = _end - 0x10; minus_abs = _end - _start; max = MAX(11, 22); min = MIN(11, 22); log2ceil0 = LOG2CEIL(0); log2ceil1 = LOG2CEIL(1); log2ceil2 = LOG2CEIL(2); log2ceil3 = LOG2CEIL(3); log2ceil4 = LOG2CEIL(4); log2ceil100000000 = LOG2CEIL(0x100000000); log2ceil100000001 = LOG2CEIL(0x100000001); log2ceilmax = LOG2CEIL(0xffffffffffffffff); logicaland1 = 0 && 0; logicaland2 = 0 && 1; logicaland3 = 1 && 0; logicaland4 = 1 && 1; logicalor1 = 0 || 0; logicalor2 = 0 || 1; logicalor3 = 1 || 0; logicalor4 = 1 || 1; } # CHECK: 00000000000006 A plus # CHECK-NEXT: 00000000000004 A minus # CHECK-NEXT: 00000000000003 A div # CHECK-NEXT: 00000000000006 A mod # CHECK-NEXT: 00000000000007 A mul # CHECK-NEXT: 00000000000005 A nospace # CHECK-NEXT: 00000000000015 A braces # CHECK-NEXT: 000000000000aa A and # CHECK-NEXT: 00000000000001 A ternary1 # CHECK-NEXT: 00000000000002 A ternary2 # CHECK-NEXT: 00000000000002 A less # CHECK-NEXT: 00000000000001 A lesseq # CHECK-NEXT: 00000000000002 A greater # CHECK-NEXT: 00000000000001 A greatereq # CHECK-NEXT: 00000000000001 A eq # CHECK-NEXT: 00000000000002 A neq # CHECK-NEXT: 00000000000003 A plusassign # CHECK-NEXT: 00000000000002 A unary # CHECK-NEXT: 00000000000020 A lshift # CHECK-NEXT: 0000000000001f A rshift # CHECK-NEXT: 00000000000009 A precedence1 # CHECK-NEXT: 00000000000009 A precedence2 # CHECK-NEXT: 00000000001000 A maxpagesize # CHECK-NEXT: 00000000001000 A commonpagesize # CHECK-NEXT: 0000000000ffff A datasegmentalign # CHECK-NEXT: 0000000000fff0 A datasegmentalign2 # CHECK-NEXT: 0000000000ffe0 T minus_rel # CHECK-NEXT: 0000000000fff0 A minus_abs # CHECK-NEXT: 00000000000016 A max # CHECK-NEXT: 0000000000000b A min # CHECK-NEXT: 0000000000000000 A log2ceil0 # CHECK-NEXT: 0000000000000000 A log2ceil1 # CHECK-NEXT: 0000000000000001 A log2ceil2 # CHECK-NEXT: 0000000000000002 A log2ceil3 # CHECK-NEXT: 0000000000000002 A log2ceil4 # CHECK-NEXT: 0000000000000020 A log2ceil100000000 # CHECK-NEXT: 0000000000000021 A log2ceil100000001 # CHECK-NEXT: 0000000000000040 A log2ceilmax # CHECK-NEXT: 00000000000000 A logicaland1 # CHECK-NEXT: 00000000000000 A logicaland2 # CHECK-NEXT: 00000000000000 A logicaland3 # CHECK-NEXT: 00000000000001 A logicaland4 # CHECK-NEXT: 00000000000000 A logicalor1 # CHECK-NEXT: 00000000000001 A logicalor2 # CHECK-NEXT: 00000000000001 A logicalor3 # CHECK-NEXT: 00000000000001 A logicalor4 ## Mailformed number error. # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=NUMERR %s # NUMERR: malformed number: 0x12Q41 ## Missing closing bracket. # RUN: echo "SECTIONS { . = (1; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=BRACKETERR %s # BRACKETERR: ) expected, but got ; ## Missing opening bracket. # RUN: echo "SECTIONS { . = 1); }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=BRACKETERR2 %s # BRACKETERR2: ; expected, but got ) ## Empty expression. # RUN: echo "SECTIONS { . = ; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=ERREXPR %s # ERREXPR: malformed number: ; ## Div by zero error. # RUN: echo "SECTIONS { . = 1 / 0; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=DIVZERO %s # DIVZERO: {{.*}}.script:1: division by zero ## Mod by zero error. # RUN: echo "SECTIONS { . = 1 % 0; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=MODZERO %s # MODZERO: {{.*}}.script:1: modulo by zero ## Broken ternary operator expression. # RUN: echo "SECTIONS { . = 1 ? 2; }" > %t.script # RUN: not ld.lld %t.o -T %t.script -o /dev/null 2>&1 | \ # RUN: FileCheck --check-prefix=TERNERR %s # TERNERR: : expected, but got ;