3
3
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/cat1.s -o %t/cat1.o
4
4
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/cat2.s -o %t/cat2.o
5
5
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/klass.s -o %t/klass.o
6
+ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/cat1.s --defsym MAKE_LOAD_METHOD=1 -o %t/cat1-with-load.o
7
+ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/cat2.s --defsym MAKE_LOAD_METHOD=1 -o %t/cat2-with-load.o
8
+ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/klass.s --defsym MAKE_LOAD_METHOD=1 -o %t/klass-with-load.o
6
9
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos11.0 -I %t %t/klass-with-no-rodata.s -o %t/klass-with-no-rodata.o
7
10
# RUN: %lld -dylib -lobjc %t/klass.o -o %t/libklass.dylib
8
11
11
14
# RUN: %no-fatal-warnings-lld -dylib -lobjc %t/libklass.dylib %t/cat1.o \
12
15
# RUN: %t/cat2.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=CATCAT
13
16
17
+ ## Check that we don't emit spurious warnings around the +load method while
18
+ ## still emitting the other warnings. Note that we have made separate
19
+ ## `*-with-load.s` files for ease of comparison with ld64; ld64 will not warn
20
+ ## at all if multiple +load methods are present.
21
+ # RUN: %no-fatal-warnings-lld -dylib -lobjc %t/klass-with-load.o \
22
+ # RUN: %t/cat1-with-load.o %t/cat2-with-load.o -o /dev/null 2>&1 | \
23
+ # RUN: FileCheck %s --check-prefixes=CATCLS,CATCAT --implicit-check-not '+load'
24
+
14
25
## Regression test: Check that we don't crash.
15
26
# RUN: %no-fatal-warnings-lld -dylib -lobjc %t/klass-with-no-rodata.o -o /dev/null
16
27
17
28
# CATCLS: warning: method '+s1' has conflicting definitions:
18
- # CATCLS-NEXT: >>> defined in category Cat1 from {{.*}}cat1.o
19
- # CATCLS-NEXT: >>> defined in class Foo from {{.*}}klass.o
29
+ # CATCLS-NEXT: >>> defined in category Cat1 from {{.*}}cat1{{.*}} .o
30
+ # CATCLS-NEXT: >>> defined in class Foo from {{.*}}klass{{.*}} .o
20
31
21
32
# CATCLS: warning: method '-m1' has conflicting definitions:
22
- # CATCLS-NEXT: >>> defined in category Cat1 from {{.*}}cat1.o
23
- # CATCLS-NEXT: >>> defined in class Foo from {{.*}}klass.o
33
+ # CATCLS-NEXT: >>> defined in category Cat1 from {{.*}}cat1{{.*}} .o
34
+ # CATCLS-NEXT: >>> defined in class Foo from {{.*}}klass{{.*}} .o
24
35
25
36
# CATCAT: warning: method '+s2' has conflicting definitions:
26
- # CATCAT-NEXT: >>> defined in category Cat2 from {{.*}}cat2.o
27
- # CATCAT-NEXT: >>> defined in category Cat1 from {{.*}}cat1.o
37
+ # CATCAT-NEXT: >>> defined in category Cat2 from {{.*}}cat2{{.*}} .o
38
+ # CATCAT-NEXT: >>> defined in category Cat1 from {{.*}}cat1{{.*}} .o
28
39
29
40
# CATCAT: warning: method '-m2' has conflicting definitions:
30
- # CATCAT-NEXT: >>> defined in category Cat2 from {{.*}}cat2.o
31
- # CATCAT-NEXT: >>> defined in category Cat1 from {{.*}}cat1.o
41
+ # CATCAT-NEXT: >>> defined in category Cat2 from {{.*}}cat2{{.*}} .o
42
+ # CATCAT-NEXT: >>> defined in category Cat1 from {{.*}}cat1{{.*}} .o
32
43
33
44
#--- cat1.s
34
45
51
62
.section __DATA,__objc_catlist,regular,no_dead_strip
52
63
.quad __OBJC_$_CATEGORY_Foo_$_Cat1
53
64
65
+ .ifdef MAKE_LOAD_METHOD
66
+ .section __DATA,__objc_nlcatlist,regular,no_dead_strip
67
+ .quad __OBJC_$_CATEGORY_Foo_$_Cat1
68
+ .endif
69
+
54
70
.section __DATA,__objc_const
55
71
__OBJC_$_CATEGORY_Foo_$_Cat1:
56
72
.objc_classname "Cat1"
@@ -71,7 +87,12 @@ __OBJC_$_CATEGORY_INSTANCE_METHODS_Foo_$_Cat1:
71
87
72
88
__OBJC_$_CATEGORY_CLASS_METHODS_Foo_$_Cat1:
73
89
.long 24
90
+ .ifdef MAKE_LOAD_METHOD
91
+ .long 3
92
+ .empty_objc_method "load" , "v16@0:8" , "+[Foo(Cat1) load]"
93
+ .else
74
94
.long 2
95
+ .endif
75
96
.empty_objc_method "s1" , "v16@0:8" , "+[Foo(Cat1) s1]"
76
97
.empty_objc_method "s2" , "v16@0:8" , "+[Foo(Cat1) s2]"
77
98
@@ -98,6 +119,11 @@ __OBJC_$_CATEGORY_CLASS_METHODS_Foo_$_Cat1:
98
119
.section __DATA,__objc_catlist,regular,no_dead_strip
99
120
.quad __OBJC_$_CATEGORY_Foo_$_Cat2
100
121
122
+ .ifdef MAKE_LOAD_METHOD
123
+ .section __DATA,__objc_nlcatlist,regular,no_dead_strip
124
+ .quad __OBJC_$_CATEGORY_Foo_$_Cat2
125
+ .endif
126
+
101
127
.section __DATA,__objc_const
102
128
__OBJC_$_CATEGORY_Foo_$_Cat2:
103
129
.objc_classname "Cat2"
@@ -117,7 +143,12 @@ __OBJC_$_CATEGORY_INSTANCE_METHODS_Foo_$_Cat2:
117
143
118
144
__OBJC_$_CATEGORY_CLASS_METHODS_Foo_$_Cat2:
119
145
.long 24
146
+ .ifdef MAKE_LOAD_METHOD
147
+ .long 2
148
+ .empty_objc_method "load" , "v16@0:8" , "+[Foo(Cat2) load]"
149
+ .else
120
150
.long 1
151
+ .endif
121
152
.empty_objc_method "s2" , "v16@0:8" , "+[Foo(Cat2) m2]"
122
153
123
154
.section __DATA,__objc_imageinfo,regular,no_dead_strip
@@ -186,7 +217,12 @@ __OBJC_CLASS_RO_$_Foo:
186
217
187
218
__OBJC_$_CLASS_METHODS_Foo:
188
219
.long 24
220
+ .ifdef MAKE_LOAD_METHOD
221
+ .long 2
222
+ .empty_objc_method "load" , "v16@0:8" , "+[Foo load]"
223
+ .else
189
224
.long 1
225
+ .endif
190
226
.empty_objc_method "s1" , "v16@0:8" , "+[Foo s1]"
191
227
192
228
__OBJC_$_INSTANCE_METHODS_Foo:
@@ -197,6 +233,11 @@ __OBJC_$_INSTANCE_METHODS_Foo:
197
233
.section __DATA,__objc_classlist,regular,no_dead_strip
198
234
.quad _OBJC_CLASS_$_Foo
199
235
236
+ .ifdef MAKE_LOAD_METHOD
237
+ .section __DATA,__objc_nlclslist,regular,no_dead_strip
238
+ .quad _OBJC_CLASS_$_Foo
239
+ .endif
240
+
200
241
.section __DATA,__objc_imageinfo,regular,no_dead_strip
201
242
.long 0
202
243
.long 64
0 commit comments