• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
3
4## Insert a character.
5## The spell corrector is enabled for the first two "undefined symbol" diagnostics.
6# RUN: echo 'call bcde; call abcd; call abde' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
7# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=INSERT %s -DFILE=%t.o
8
9## Symbols defined in DSO can be suggested.
10# RUN: ld.lld %t.o -shared -o %t.so
11# RUN: not ld.lld %t.so %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=INSERT %s -DFILE=%t.so
12
13# INSERT:      error: undefined symbol: bcde
14# INSERT-NEXT: >>> referenced by {{.*}}
15# INSERT-NEXT: >>> did you mean: abcde
16# INSERT-NEXT: >>> defined in: [[FILE]]
17# INSERT:      error: undefined symbol: abcd
18# INSERT-NEXT: >>> referenced by {{.*}}
19# INSERT-NEXT: >>> did you mean: abcde
20# INSERT-NEXT: >>> defined in: [[FILE]]
21# INSERT:      error: undefined symbol: abde
22# INSERT-NEXT: >>> referenced by {{.*}}
23# INSERT-NOT:  >>>
24
25## Substitute a character.
26# RUN: echo 'call bbcde; call abcdd' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
27# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=SUBST %s
28
29# SUBST:      error: undefined symbol: bbcde
30# SUBST-NEXT: >>> referenced by {{.*}}
31# SUBST-NEXT: >>> did you mean: abcde
32# SUBST:      error: undefined symbol: abcdd
33# SUBST-NEXT: >>> referenced by {{.*}}
34# SUBST-NEXT: >>> did you mean: abcde
35
36## Delete a character.
37# RUN: echo 'call aabcde; call abcdee' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
38# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=DELETE %s
39
40# DELETE:      error: undefined symbol: aabcde
41# DELETE-NEXT: >>> referenced by {{.*}}
42# DELETE-NEXT: >>> did you mean: abcde
43# DELETE:      error: undefined symbol: abcdee
44# DELETE-NEXT: >>> referenced by {{.*}}
45# DELETE-NEXT: >>> did you mean: abcde
46
47## Transpose.
48# RUN: echo 'call bacde' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
49# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=TRANSPOSE %s
50
51# TRANSPOSE:      error: undefined symbol: bacde
52# TRANSPOSE-NEXT: >>> referenced by {{.*}}
53# TRANSPOSE-NEXT: >>> did you mean: abcde
54
55## Missing const qualifier.
56# RUN: echo 'call _Z3fooPi' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
57# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=CONST %s
58## Local defined symbols.
59# RUN: echo '_Z3fooPKi: call _Z3fooPi' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
60# RUN: not ld.lld %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=CONST %s
61
62# CONST:      error: undefined symbol: foo(int*)
63# CONST-NEXT: >>> referenced by {{.*}}
64# CONST-NEXT: >>> did you mean: foo(int const*)
65
66## Case mismatch.
67# RUN: echo 'call _Z3FOOPKi' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
68# RUN: not ld.lld %t.o %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=CASE %s
69# RUN: echo '_Z3fooPKi: call _Z3FOOPKi' | llvm-mc -filetype=obj -triple=x86_64 - -o %t1.o
70# RUN: not ld.lld %t1.o -o /dev/null 2>&1 | FileCheck --check-prefix=CASE %s
71
72# CASE:      error: undefined symbol: FOO(int const*)
73# CASE-NEXT: >>> referenced by {{.*}}
74# CASE-NEXT: >>> did you mean: foo(int const*)
75
76.globl _start, abcde, _Z3fooPKi
77_start:
78abcde:
79_Z3fooPKi:
80