1# REQUIRES: aarch64 2# RUN: rm -rf %t; mkdir %t && cd %t 3 4############ Test swift category merging into @objc class, with protocol ############ 5# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o cat_swift.o %s 6# RUN: %lld -arch arm64 -dylib -o cat_swift.dylib cat_swift.o -objc_category_merging 7# RUN: llvm-objdump --objc-meta-data --macho cat_swift.dylib | FileCheck %s --check-prefixes=CHECK-MERGE 8 9 10; CHECK-MERGE: Contents of (__DATA_CONST,__objc_classlist) section 11 12; CHECK-MERGE-NEXT: [[#%x,]] 0x[[#%x,]] _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass 13; CHECK-MERGE-NEXT: isa 0x[[#%x,]] _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass 14; CHECK-MERGE-NEXT: superclass 0x0 15; CHECK-MERGE-NEXT: cache 0x0 16; CHECK-MERGE-NEXT: vtable 0x0 17; CHECK-MERGE-NEXT: data 0x[[#%x,]] (struct class_ro_t *) Swift class 18; CHECK-MERGE-NEXT: flags 0x80 19; CHECK-MERGE-NEXT: instanceStart 8 20; CHECK-MERGE-NEXT: instanceSize 8 21; CHECK-MERGE-NEXT: reserved 0x0 22; CHECK-MERGE-NEXT: ivarLayout 0x0 23; CHECK-MERGE-NEXT: name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass 24; CHECK-MERGE-NEXT: baseMethods 0x[[#%x,]] (struct method_list_t *) 25; CHECK-MERGE-NEXT: entsize 24 26; CHECK-MERGE-NEXT: count 1 27; CHECK-MERGE-NEXT: name 0x[[#%x,]] init 28; CHECK-MERGE-NEXT: types 0x[[#%x,]] @16@0:8 29; CHECK-MERGE-NEXT: imp _$s11MyTestClassAACABycfcTo 30; CHECK-MERGE-NEXT: baseProtocols 0x0 31; CHECK-MERGE-NEXT: ivars 0x0 32; CHECK-MERGE-NEXT: weakIvarLayout 0x0 33; CHECK-MERGE-NEXT: baseProperties 0x0 34; CHECK-MERGE-NEXT: Meta Class 35; CHECK-MERGE-NEXT: isa 0x0 36; CHECK-MERGE-NEXT: superclass 0x0 37; CHECK-MERGE-NEXT: cache 0x0 38; CHECK-MERGE-NEXT: vtable 0x0 39; CHECK-MERGE-NEXT: data 0x[[#%x,]] (struct class_ro_t *) 40; CHECK-MERGE-NEXT: flags 0x81 RO_META 41; CHECK-MERGE-NEXT: instanceStart 40 42; CHECK-MERGE-NEXT: instanceSize 40 43; CHECK-MERGE-NEXT: reserved 0x0 44; CHECK-MERGE-NEXT: ivarLayout 0x0 45; CHECK-MERGE-NEXT: name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass 46; CHECK-MERGE-NEXT: baseMethods 0x0 (struct method_list_t *) 47; CHECK-MERGE-NEXT: baseProtocols 0x0 48; CHECK-MERGE-NEXT: ivars 0x0 49; CHECK-MERGE-NEXT: weakIvarLayout 0x0 50; CHECK-MERGE-NEXT: baseProperties 0x0 51 52 53; ================== Generated from Swift: ================== 54;; > xcrun swiftc --version 55;; swift-driver version: 1.109.2 Apple Swift version 6.0 (swiftlang-6.0.0.3.300 clang-1600.0.20.10) 56;; > xcrun swiftc -S MyTestClass.swift -o MyTestClass.s 57;; 58; import Foundation 59; 60; protocol MyProtocol { 61; func protocolMethod() 62; } 63; 64; @objc class MyTestClass: NSObject, MyProtocol { 65; func protocolMethod() { 66; } 67; } 68; 69; extension MyTestClass { 70; public func extensionMethod() { 71; } 72; } 73; ================== Generated from Swift: ================== 74 75 76 .section __TEXT,__text,regular,pure_instructions 77 .build_version macos, 11, 0 sdk_version 10, 0 78 .globl _main 79 .p2align 2 80_main: 81 .cfi_startproc 82 mov w0, #0 83 ret 84 .cfi_endproc 85 86 .private_extern _$s11MyTestClassAAC14protocolMethodyyF 87 .globl _$s11MyTestClassAAC14protocolMethodyyF 88 .p2align 2 89_$s11MyTestClassAAC14protocolMethodyyF: 90 .cfi_startproc 91 ret 92 .cfi_endproc 93 94 .private_extern _$s11MyTestClassAACABycfC 95 .globl _$s11MyTestClassAACABycfC 96 .p2align 2 97_$s11MyTestClassAACABycfC: 98 .cfi_startproc 99 ret 100 .cfi_endproc 101 102 .private_extern _$s11MyTestClassAACABycfc 103 .globl _$s11MyTestClassAACABycfc 104 .p2align 2 105_$s11MyTestClassAACABycfc: 106 .cfi_startproc 107 ret 108 .cfi_endproc 109 110 .private_extern _$s11MyTestClassAACMa 111 .globl _$s11MyTestClassAACMa 112 .p2align 2 113_$s11MyTestClassAACMa: 114 ret 115 116 .p2align 2 117_$s11MyTestClassAACABycfcTo: 118 .cfi_startproc 119 ret 120 .cfi_endproc 121 122 .private_extern _$s11MyTestClassAACfD 123 .globl _$s11MyTestClassAACfD 124 .p2align 2 125_$s11MyTestClassAACfD: 126 .cfi_startproc 127 ret 128 .cfi_endproc 129 130 .p2align 2 131_$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW: 132 .cfi_startproc 133 ret 134 .cfi_endproc 135 136 .private_extern _$s11MyTestClassAAC15extensionMethodyyF 137 .globl _$s11MyTestClassAAC15extensionMethodyyF 138 .p2align 2 139_$s11MyTestClassAAC15extensionMethodyyF: 140 .cfi_startproc 141 ret 142 .cfi_endproc 143 144 .section __TEXT,__objc_methname,cstring_literals 145"L_selector_data(init)": 146 .asciz "init" 147 148 .section __DATA,__objc_selrefs,literal_pointers,no_dead_strip 149 .p2align 3, 0x0 150"L_selector(init)": 151 .quad "L_selector_data(init)" 152 153 .section __TEXT,__objc_methname,cstring_literals 154"L_selector_data(dealloc)": 155 .asciz "dealloc" 156 157 .section __DATA,__objc_selrefs,literal_pointers,no_dead_strip 158 .p2align 3, 0x0 159"L_selector(dealloc)": 160 .quad "L_selector_data(dealloc)" 161 162 .private_extern _$s11MyTestClassAACAA0A8ProtocolAAMc 163 .section __TEXT,__const 164 .globl _$s11MyTestClassAACAA0A8ProtocolAAMc 165 .p2align 2, 0x0 166_$s11MyTestClassAACAA0A8ProtocolAAMc: 167 .long _$s11MyTestClass0A8ProtocolMp-_$s11MyTestClassAACAA0A8ProtocolAAMc 168 .long (_$s11MyTestClassAACMn-_$s11MyTestClassAACAA0A8ProtocolAAMc)-4 169 .long (_$s11MyTestClassAACAA0A8ProtocolAAWP-_$s11MyTestClassAACAA0A8ProtocolAAMc)-8 170 .long 0 171 172 .private_extern _$s11MyTestClassAACAA0A8ProtocolAAWP 173 .section __DATA,__const 174 .globl _$s11MyTestClassAACAA0A8ProtocolAAWP 175 .p2align 3, 0x0 176_$s11MyTestClassAACAA0A8ProtocolAAWP: 177 .quad _$s11MyTestClassAACAA0A8ProtocolAAMc 178 .quad _$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW 179 180 .section __TEXT,__swift5_entry,regular,no_dead_strip 181 .p2align 2, 0x0 182l_entry_point: 183 .long _main-l_entry_point 184 .long 0 185 186 .private_extern "_symbolic $s11MyTestClass0A8ProtocolP" 187 .section __TEXT,__swift5_typeref 188 .globl "_symbolic $s11MyTestClass0A8ProtocolP" 189 .weak_definition "_symbolic $s11MyTestClass0A8ProtocolP" 190 .p2align 1, 0x0 191"_symbolic $s11MyTestClass0A8ProtocolP": 192 .ascii "$s11MyTestClass0A8ProtocolP" 193 .byte 0 194 195 .section __TEXT,__swift5_fieldmd 196 .p2align 2, 0x0 197_$s11MyTestClass0A8Protocol_pMF: 198 .long "_symbolic $s11MyTestClass0A8ProtocolP"-_$s11MyTestClass0A8Protocol_pMF 199 .long 0 200 .short 4 201 .short 12 202 .long 0 203 204 .section __TEXT,__const 205l_.str.11.MyTestClass: 206 .asciz "MyTestClass" 207 208 .private_extern _$s11MyTestClassMXM 209 .section __TEXT,__constg_swiftt 210 .globl _$s11MyTestClassMXM 211 .weak_definition _$s11MyTestClassMXM 212 .p2align 2, 0x0 213_$s11MyTestClassMXM: 214 .long 0 215 .long 0 216 .long (l_.str.11.MyTestClass-_$s11MyTestClassMXM)-8 217 218 .section __TEXT,__const 219l_.str.10.MyProtocol: 220 .asciz "MyProtocol" 221 222 .private_extern _$s11MyTestClass0A8ProtocolMp 223 .section __TEXT,__constg_swiftt 224 .globl _$s11MyTestClass0A8ProtocolMp 225 .p2align 2, 0x0 226_$s11MyTestClass0A8ProtocolMp: 227 .long 65603 228 .long (_$s11MyTestClassMXM-_$s11MyTestClass0A8ProtocolMp)-4 229 .long (l_.str.10.MyProtocol-_$s11MyTestClass0A8ProtocolMp)-8 230 .long 0 231 .long 1 232 .long 0 233 .long 17 234 .long 0 235 236 .private_extern _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass 237 .section __DATA,__data 238 .globl _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass 239 .p2align 3, 0x0 240_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass: 241 .quad _OBJC_METACLASS_$_NSObject 242 .quad _OBJC_METACLASS_$_NSObject 243 .quad __objc_empty_cache 244 .quad 0 245 .quad __METACLASS_DATA__TtC11MyTestClass11MyTestClass 246 247 .section __TEXT,__cstring,cstring_literals 248 .p2align 4, 0x0 249l_.str.30._TtC11MyTestClass11MyTestClass: 250 .asciz "_TtC11MyTestClass11MyTestClass" 251 252 .section __DATA,__objc_const 253 .p2align 3, 0x0 254__METACLASS_DATA__TtC11MyTestClass11MyTestClass: 255 .long 129 256 .long 40 257 .long 40 258 .long 0 259 .quad 0 260 .quad l_.str.30._TtC11MyTestClass11MyTestClass 261 .quad 0 262 .quad 0 263 .quad 0 264 .quad 0 265 .quad 0 266 267 .section __TEXT,__cstring,cstring_literals 268"l_.str.7.@16@0:8": 269 .asciz "@16@0:8" 270 271 .section __DATA,__objc_data 272 .p2align 3, 0x0 273__INSTANCE_METHODS__TtC11MyTestClass11MyTestClass: 274 .long 24 275 .long 1 276 .quad "L_selector_data(init)" 277 .quad "l_.str.7.@16@0:8" 278 .quad _$s11MyTestClassAACABycfcTo 279 280 .p2align 3, 0x0 281__DATA__TtC11MyTestClass11MyTestClass: 282 .long 128 283 .long 8 284 .long 8 285 .long 0 286 .quad 0 287 .quad l_.str.30._TtC11MyTestClass11MyTestClass 288 .quad __INSTANCE_METHODS__TtC11MyTestClass11MyTestClass 289 .quad 0 290 .quad 0 291 .quad 0 292 .quad 0 293 294 .private_extern "_symbolic So8NSObjectC" 295 .section __TEXT,__swift5_typeref 296 .globl "_symbolic So8NSObjectC" 297 .weak_definition "_symbolic So8NSObjectC" 298 .p2align 1, 0x0 299"_symbolic So8NSObjectC": 300 .ascii "So8NSObjectC" 301 .byte 0 302 303 .private_extern _$s11MyTestClassAACMn 304 .section __TEXT,__constg_swiftt 305 .globl _$s11MyTestClassAACMn 306 .p2align 2, 0x0 307_$s11MyTestClassAACMn: 308 .long 2147483728 309 .long (_$s11MyTestClassMXM-_$s11MyTestClassAACMn)-4 310 .long (l_.str.11.MyTestClass-_$s11MyTestClassAACMn)-8 311 .long (_$s11MyTestClassAACMa-_$s11MyTestClassAACMn)-12 312 .long (_$s11MyTestClassAACMF-_$s11MyTestClassAACMn)-16 313 .long ("_symbolic So8NSObjectC"-_$s11MyTestClassAACMn)-20 314 .long 3 315 .long 11 316 .long 1 317 .long 0 318 .long 10 319 .long 10 320 .long 1 321 .long 16 322 .long (_$s11MyTestClassAAC14protocolMethodyyF-_$s11MyTestClassAACMn)-56 323 324 .section __DATA,__objc_data 325 .p2align 3, 0x0 326_$s11MyTestClassAACMf: 327 .quad 0 328 .quad _$s11MyTestClassAACfD 329 .quad _$sBOWV 330 .quad _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass 331 .quad _OBJC_CLASS_$_NSObject 332 .quad __objc_empty_cache 333 .quad 0 334 .quad __DATA__TtC11MyTestClass11MyTestClass+2 335 .long 0 336 .long 0 337 .long 8 338 .short 7 339 .short 0 340 .long 112 341 .long 24 342 .quad _$s11MyTestClassAACMn 343 .quad 0 344 .quad _$s11MyTestClassAAC14protocolMethodyyF 345 346 .private_extern "_symbolic _____ 11MyTestClassAAC" 347 .section __TEXT,__swift5_typeref 348 .globl "_symbolic _____ 11MyTestClassAAC" 349 .weak_definition "_symbolic _____ 11MyTestClassAAC" 350 .p2align 1, 0x0 351"_symbolic _____ 11MyTestClassAAC": 352 .byte 1 353 .long (_$s11MyTestClassAACMn-"_symbolic _____ 11MyTestClassAAC")-1 354 .byte 0 355 356 .section __TEXT,__swift5_fieldmd 357 .p2align 2, 0x0 358_$s11MyTestClassAACMF: 359 .long "_symbolic _____ 11MyTestClassAAC"-_$s11MyTestClassAACMF 360 .long ("_symbolic So8NSObjectC"-_$s11MyTestClassAACMF)-4 361 .short 7 362 .short 12 363 .long 0 364 365 .section __TEXT,__swift5_protos 366 .p2align 2, 0x0 367l_$s11MyTestClass0A8ProtocolHr: 368 .long _$s11MyTestClass0A8ProtocolMp-l_$s11MyTestClass0A8ProtocolHr 369 370 .section __TEXT,__swift5_proto 371 .p2align 2, 0x0 372l_$s11MyTestClassAACAA0A8ProtocolAAHc: 373 .long _$s11MyTestClassAACAA0A8ProtocolAAMc-l_$s11MyTestClassAACAA0A8ProtocolAAHc 374 375 .section __TEXT,__swift5_types 376 .p2align 2, 0x0 377l_$s11MyTestClassAACHn: 378 .long _$s11MyTestClassAACMn-l_$s11MyTestClassAACHn 379 380 .private_extern ___swift_reflection_version 381 .section __TEXT,__const 382 .globl ___swift_reflection_version 383 .weak_definition ___swift_reflection_version 384 .p2align 1, 0x0 385___swift_reflection_version: 386 .short 3 387 388 .section __DATA,__objc_classlist,regular,no_dead_strip 389 .p2align 3, 0x0 390_objc_classes_$s11MyTestClassAACN: 391 .quad _$s11MyTestClassAACN 392 393 .no_dead_strip _main 394 .no_dead_strip l_entry_point 395 .no_dead_strip _$s11MyTestClass0A8Protocol_pMF 396 .no_dead_strip _$s11MyTestClassAACMF 397 .no_dead_strip __swift_FORCE_LOAD_$_swiftFoundation_$_MyTestClass 398 .no_dead_strip __swift_FORCE_LOAD_$_swiftDarwin_$_MyTestClass 399 .no_dead_strip __swift_FORCE_LOAD_$_swiftObjectiveC_$_MyTestClass 400 .no_dead_strip __swift_FORCE_LOAD_$_swiftCoreFoundation_$_MyTestClass 401 .no_dead_strip __swift_FORCE_LOAD_$_swiftDispatch_$_MyTestClass 402 .no_dead_strip __swift_FORCE_LOAD_$_swiftXPC_$_MyTestClass 403 .no_dead_strip __swift_FORCE_LOAD_$_swiftIOKit_$_MyTestClass 404 .no_dead_strip l_$s11MyTestClass0A8ProtocolHr 405 .no_dead_strip l_$s11MyTestClassAACAA0A8ProtocolAAHc 406 .no_dead_strip l_$s11MyTestClassAACHn 407 .no_dead_strip ___swift_reflection_version 408 .no_dead_strip _objc_classes_$s11MyTestClassAACN 409 .section __DATA,__objc_imageinfo,regular,no_dead_strip 410L_OBJC_IMAGE_INFO: 411 .long 0 412 .long 100665152 413 414 .globl _$s11MyTestClass0A8ProtocolTL 415 .private_extern _$s11MyTestClass0A8ProtocolTL 416 .alt_entry _$s11MyTestClass0A8ProtocolTL 417.set _$s11MyTestClass0A8ProtocolTL, (_$s11MyTestClass0A8ProtocolMp+24)-8 418 .globl _$s11MyTestClassAAC14protocolMethodyyFTq 419 .private_extern _$s11MyTestClassAAC14protocolMethodyyFTq 420 .alt_entry _$s11MyTestClassAAC14protocolMethodyyFTq 421.set _$s11MyTestClassAAC14protocolMethodyyFTq, _$s11MyTestClassAACMn+52 422 .globl _$s11MyTestClassAACN 423 .private_extern _$s11MyTestClassAACN 424 .alt_entry _$s11MyTestClassAACN 425.set _$s11MyTestClassAACN, _$s11MyTestClassAACMf+24 426 .globl _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass 427 .private_extern _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass 428.set _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass, _$s11MyTestClassAACN 429 .weak_reference __swift_FORCE_LOAD_$_swiftFoundation 430 .weak_reference __swift_FORCE_LOAD_$_swiftDarwin 431 .weak_reference __swift_FORCE_LOAD_$_swiftObjectiveC 432 .weak_reference __swift_FORCE_LOAD_$_swiftCoreFoundation 433 .weak_reference __swift_FORCE_LOAD_$_swiftDispatch 434 .weak_reference __swift_FORCE_LOAD_$_swiftXPC 435 .weak_reference __swift_FORCE_LOAD_$_swiftIOKit 436.subsections_via_symbols 437 438_OBJC_CLASS_$_NSObject: 439_OBJC_METACLASS_$_NSObject: 440__objc_empty_cache: 441_$sBOWV: 442 .quad 0 443