annotate lld/test/COFF/comdat-selection.s @ 192:d7606dcf6fce

Added tag llvm10 for changeset 0572611fdcc8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2020 18:01:34 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # REQUIRES: x86
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 # Tests handling of the comdat selection type.
anatofuz
parents:
diff changeset
4 # (Except associative which is tested in associative-comdat.s and
anatofuz
parents:
diff changeset
5 # comdat-selection-associate-largest.s instead.)
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 # Create obj files with each selection type.
anatofuz
parents:
diff changeset
8 # RUN: sed -e s/SEL/discard/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.discard.obj
anatofuz
parents:
diff changeset
9 # RUN: sed -e s/SEL/discard/ -e s/.long/.short/ -e s/1/2/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.discard.short.2.obj
anatofuz
parents:
diff changeset
10 # RUN: sed -e s/SEL/one_only/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.one_only.obj
anatofuz
parents:
diff changeset
11 # RUN: sed -e s/SEL/same_size/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.same_size.obj
anatofuz
parents:
diff changeset
12 # RUN: sed -e s/SEL/same_size/ -e s/.long/.short/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.same_size.short.obj
anatofuz
parents:
diff changeset
13 # RUN: sed -e s/SEL/same_contents/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.same_contents.obj
anatofuz
parents:
diff changeset
14 # RUN: sed -e s/SEL/same_contents/ -e s/.long/.short/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.same_contents.short.obj
anatofuz
parents:
diff changeset
15 # RUN: sed -e s/SEL/same_contents/ -e s/1/2/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.same_contents.2.obj
anatofuz
parents:
diff changeset
16 # RUN: sed -e s/SEL/largest/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.largest.obj
anatofuz
parents:
diff changeset
17 # RUN: sed -e s/SEL/largest/ -e s/.long/.short/ -e s/1/2/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.largest.short.2.obj
anatofuz
parents:
diff changeset
18 # RUN: sed -e s/SEL/newest/ %s | llvm-mc -triple x86_64-pc-win32 -filetype=obj -o %t.newest.obj
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 .section .text$nm, "", SEL, symbol
anatofuz
parents:
diff changeset
21 .globl symbol
anatofuz
parents:
diff changeset
22 symbol:
anatofuz
parents:
diff changeset
23 .long 1
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 # First, pass each selection type twice. All should link fine except for
anatofuz
parents:
diff changeset
26 # one_only which should report a duplicate symbol error and newest which
anatofuz
parents:
diff changeset
27 # link.exe (and hence lld-link) doesn't understand.
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 # RUN: cp %t.discard.obj %t.obj && lld-link /dll /noentry /nodefaultlib %t.discard.obj %t.obj
anatofuz
parents:
diff changeset
30 # RUN: cp %t.one_only.obj %t.obj && not lld-link /dll /noentry /nodefaultlib %t.one_only.obj %t.obj 2>&1 | FileCheck --check-prefix=ONEONE %s
anatofuz
parents:
diff changeset
31 # ONEONE: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
32 # RUN: cp %t.same_size.obj %t.obj && lld-link /dll /noentry /nodefaultlib %t.same_size.obj %t.obj
anatofuz
parents:
diff changeset
33 # RUN: cp %t.same_contents.obj %t.obj && lld-link /dll /noentry /nodefaultlib %t.same_contents.obj %t.obj
anatofuz
parents:
diff changeset
34 # RUN: cp %t.largest.obj %t.obj && lld-link /dll /noentry /nodefaultlib %t.largest.obj %t.obj
anatofuz
parents:
diff changeset
35 # RUN: cp %t.newest.obj %t.obj && not lld-link /dll /noentry /nodefaultlib %t.newest.obj %t.obj 2>&1 | FileCheck --check-prefix=NEWNEW %s
anatofuz
parents:
diff changeset
36 # NEWNEW: lld-link: error: unknown comdat type 7 for symbol
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 # /force doesn't affect errors about unknown comdat types.
anatofuz
parents:
diff changeset
39 # RUN: cp %t.newest.obj %t.obj && not lld-link /force /dll /noentry /nodefaultlib %t.newest.obj %t.obj 2>&1 | FileCheck --check-prefix=NEWNEWFORCE %s
anatofuz
parents:
diff changeset
40 # NEWNEWFORCE: lld-link: error: unknown comdat type 7 for symbol
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 # Check that same_size, same_contents, largest do what they're supposed to.
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 # Check that the "same_size" selection produces an error if passed two symbols
anatofuz
parents:
diff changeset
45 # with different size.
anatofuz
parents:
diff changeset
46 # RUN: not lld-link /dll /noentry /nodefaultlib %t.same_size.obj %t.same_size.short.obj 2>&1 | FileCheck --check-prefix=SAMESIZEDUPE %s
anatofuz
parents:
diff changeset
47 # SAMESIZEDUPE: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 # Check that the "same_contents" selection produces an error if passed two
anatofuz
parents:
diff changeset
50 # symbols with different contents.
anatofuz
parents:
diff changeset
51 # RUN: not lld-link /dll /noentry /nodefaultlib %t.same_contents.obj %t.same_contents.2.obj 2>&1 | FileCheck --check-prefix=SAMECONTENTSDUPE1 %s
anatofuz
parents:
diff changeset
52 # SAMECONTENTSDUPE1: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
53 # RUN: not lld-link /dll /noentry /nodefaultlib %t.same_contents.obj %t.same_contents.2.obj 2>&1 | FileCheck --check-prefix=SAMECONTENTSDUPE2 %s
anatofuz
parents:
diff changeset
54 # SAMECONTENTSDUPE2: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 # Check that the "largest" selection picks the larger comdat (independent of
anatofuz
parents:
diff changeset
57 # the order the .obj files are passed on the commandline).
anatofuz
parents:
diff changeset
58 # RUN: lld-link /opt:noref /include:symbol /dll /noentry /nodefaultlib %t.largest.obj %t.largest.short.2.obj /out:%t.exe
anatofuz
parents:
diff changeset
59 # RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=LARGEST1 %s
anatofuz
parents:
diff changeset
60 # LARGEST1: Contents of section .text:
anatofuz
parents:
diff changeset
61 # LARGEST1: 180001000 01000000 ....
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 # FIXME: Make this pass when /opt:noref is passed.
anatofuz
parents:
diff changeset
64 # RUN: lld-link /include:symbol /dll /noentry /nodefaultlib %t.largest.short.2.obj %t.largest.obj /out:%t.exe
anatofuz
parents:
diff changeset
65 # RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=LARGEST2 %s
anatofuz
parents:
diff changeset
66 # LARGEST2: Contents of section .text:
anatofuz
parents:
diff changeset
67 # LARGEST2: 180001000 01000000 ....
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 # Test linking the same symbol with different comdat selection types.
anatofuz
parents:
diff changeset
71 # link.exe generally rejects this, except for "largest" which is allowed to
anatofuz
parents:
diff changeset
72 # combine with everything (https://bugs.llvm.org/show_bug.cgi?id=40094#c7).
anatofuz
parents:
diff changeset
73 # lld-link rejects all comdat selection type mismatches. Spot-test just a few
anatofuz
parents:
diff changeset
74 # combinations.
anatofuz
parents:
diff changeset
75
anatofuz
parents:
diff changeset
76 # RUN: not lld-link /verbose /dll /noentry /nodefaultlib %t.discard.obj %t.one_only.obj 2>&1 | FileCheck --check-prefix=DISCARDONE %s
anatofuz
parents:
diff changeset
77 # DISCARDONE: lld-link: conflicting comdat type for symbol: 2 in
anatofuz
parents:
diff changeset
78 # DISCARDONE: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
79 # RUN: lld-link /verbose /force /dll /noentry /nodefaultlib %t.discard.obj %t.one_only.obj 2>&1 | FileCheck --check-prefix=DISCARDONEFORCE %s
anatofuz
parents:
diff changeset
80 # DISCARDONEFORCE: lld-link: conflicting comdat type for symbol: 2 in
anatofuz
parents:
diff changeset
81 # DISCARDONEFORCE: lld-link: warning: duplicate symbol: symbol
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 # Make sure the error isn't depending on the order of .obj files.
anatofuz
parents:
diff changeset
84 # RUN: not lld-link /verbose /dll /noentry /nodefaultlib %t.one_only.obj %t.discard.obj 2>&1 | FileCheck --check-prefix=ONEDISCARD %s
anatofuz
parents:
diff changeset
85 # ONEDISCARD: lld-link: conflicting comdat type for symbol: 1 in
anatofuz
parents:
diff changeset
86 # ONEDISCARD: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
87
anatofuz
parents:
diff changeset
88 # RUN: not lld-link /verbose /dll /noentry /nodefaultlib %t.same_contents.obj %t.same_size.obj 2>&1 | FileCheck --check-prefix=CONTENTSSIZE %s
anatofuz
parents:
diff changeset
89 # CONTENTSSIZE: lld-link: conflicting comdat type for symbol: 4 in
anatofuz
parents:
diff changeset
90 # CONTENTSSIZE: lld-link: error: duplicate symbol: symbol
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 # Check that linking one 'discard' and one 'largest' has the effect of
anatofuz
parents:
diff changeset
93 # 'largest'.
anatofuz
parents:
diff changeset
94 # RUN: lld-link /dll /noentry /nodefaultlib %t.discard.short.2.obj %t.largest.obj
anatofuz
parents:
diff changeset
95 # RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=DISCARDLARGEST %s
anatofuz
parents:
diff changeset
96 # DISCARDLARGEST: Contents of section .text:
anatofuz
parents:
diff changeset
97 # DISCARDLARGEST: 180001000 01000000 ....
anatofuz
parents:
diff changeset
98 # RUN: lld-link /dll /noentry /nodefaultlib %t.largest.obj %t.discard.short.2.obj
anatofuz
parents:
diff changeset
99 # RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=LARGESTDISCARD %s
anatofuz
parents:
diff changeset
100 # LARGESTDISCARD: Contents of section .text:
anatofuz
parents:
diff changeset
101 # LARGESTDISCARD: 180001000 01000000 ....
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103
anatofuz
parents:
diff changeset
104 # These cases are accepted by link.exe but not by lld-link.
anatofuz
parents:
diff changeset
105 # RUN: not lld-link /verbose /dll /noentry /nodefaultlib %t.largest.obj %t.one_only.obj 2>&1 | FileCheck --check-prefix=LARGESTONE %s
anatofuz
parents:
diff changeset
106 # LARGESTONE: lld-link: conflicting comdat type for symbol: 6 in
anatofuz
parents:
diff changeset
107 # LARGESTONE: lld-link: error: duplicate symbol: symbol