# REQUIRES: aarch64
# RUN: rm -rf %t; mkdir %t && cd %t
############ Test swift category merging into @objc class, with protocol ############
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o cat_swift.o %s
# RUN: %lld -arch arm64 -dylib -o cat_swift.dylib cat_swift.o -objc_category_merging
# RUN: llvm-objdump --objc-meta-data --macho cat_swift.dylib | FileCheck %s --check-prefixes=CHECK-MERGE
; CHECK-MERGE: Contents of (__DATA_CONST,__objc_classlist) section
; CHECK-MERGE-NEXT: [[#%x,]] 0x[[#%x,]] _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
; CHECK-MERGE-NEXT: isa 0x[[#%x,]] _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
; CHECK-MERGE-NEXT: superclass 0x0
; CHECK-MERGE-NEXT: cache 0x0
; CHECK-MERGE-NEXT: vtable 0x0
; CHECK-MERGE-NEXT: data 0x[[#%x,]] (struct class_ro_t *) Swift class
; CHECK-MERGE-NEXT: flags 0x80
; CHECK-MERGE-NEXT: instanceStart 8
; CHECK-MERGE-NEXT: instanceSize 8
; CHECK-MERGE-NEXT: reserved 0x0
; CHECK-MERGE-NEXT: ivarLayout 0x0
; CHECK-MERGE-NEXT: name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass
; CHECK-MERGE-NEXT: baseMethods 0x[[#%x,]] (struct method_list_t *)
; CHECK-MERGE-NEXT: entsize 24
; CHECK-MERGE-NEXT: count 1
; CHECK-MERGE-NEXT: name 0x[[#%x,]] init
; CHECK-MERGE-NEXT: types 0x[[#%x,]] @16@0:8
; CHECK-MERGE-NEXT: imp _$s11MyTestClassAACABycfcTo
; CHECK-MERGE-NEXT: baseProtocols 0x0
; CHECK-MERGE-NEXT: ivars 0x0
; CHECK-MERGE-NEXT: weakIvarLayout 0x0
; CHECK-MERGE-NEXT: baseProperties 0x0
; CHECK-MERGE-NEXT: Meta Class
; CHECK-MERGE-NEXT: isa 0x0
; CHECK-MERGE-NEXT: superclass 0x0
; CHECK-MERGE-NEXT: cache 0x0
; CHECK-MERGE-NEXT: vtable 0x0
; CHECK-MERGE-NEXT: data 0x[[#%x,]] (struct class_ro_t *)
; CHECK-MERGE-NEXT: flags 0x81 RO_META
; CHECK-MERGE-NEXT: instanceStart 40
; CHECK-MERGE-NEXT: instanceSize 40
; CHECK-MERGE-NEXT: reserved 0x0
; CHECK-MERGE-NEXT: ivarLayout 0x0
; CHECK-MERGE-NEXT: name 0x[[#%x,]] _TtC11MyTestClass11MyTestClass
; CHECK-MERGE-NEXT: baseMethods 0x0 (struct method_list_t *)
; CHECK-MERGE-NEXT: baseProtocols 0x0
; CHECK-MERGE-NEXT: ivars 0x0
; CHECK-MERGE-NEXT: weakIvarLayout 0x0
; CHECK-MERGE-NEXT: baseProperties 0x0
; ================== Generated from Swift: ==================
;; > xcrun swiftc --version
;; swift-driver version: 1.109.2 Apple Swift version 6.0 (swiftlang-6.0.0.3.300 clang-1600.0.20.10)
;; > xcrun swiftc -S MyTestClass.swift -o MyTestClass.s
;;
; import Foundation
;
; protocol MyProtocol {
; func protocolMethod()
; }
;
; @objc class MyTestClass: NSObject, MyProtocol {
; func protocolMethod() {
; }
; }
;
; extension MyTestClass {
; public func extensionMethod() {
; }
; }
; ================== Generated from Swift: ==================
.section __TEXT,__text,regular,pure_instructions
.build_version macos, 11, 0 sdk_version 10, 0
.globl _main
.p2align 2
_main:
.cfi_startproc
mov w0, #0
ret
.cfi_endproc
.private_extern _$s11MyTestClassAAC14protocolMethodyyF
.globl _$s11MyTestClassAAC14protocolMethodyyF
.p2align 2
_$s11MyTestClassAAC14protocolMethodyyF:
.cfi_startproc
ret
.cfi_endproc
.private_extern _$s11MyTestClassAACABycfC
.globl _$s11MyTestClassAACABycfC
.p2align 2
_$s11MyTestClassAACABycfC:
.cfi_startproc
ret
.cfi_endproc
.private_extern _$s11MyTestClassAACABycfc
.globl _$s11MyTestClassAACABycfc
.p2align 2
_$s11MyTestClassAACABycfc:
.cfi_startproc
ret
.cfi_endproc
.private_extern _$s11MyTestClassAACMa
.globl _$s11MyTestClassAACMa
.p2align 2
_$s11MyTestClassAACMa:
ret
.p2align 2
_$s11MyTestClassAACABycfcTo:
.cfi_startproc
ret
.cfi_endproc
.private_extern _$s11MyTestClassAACfD
.globl _$s11MyTestClassAACfD
.p2align 2
_$s11MyTestClassAACfD:
.cfi_startproc
ret
.cfi_endproc
.p2align 2
_$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW:
.cfi_startproc
ret
.cfi_endproc
.private_extern _$s11MyTestClassAAC15extensionMethodyyF
.globl _$s11MyTestClassAAC15extensionMethodyyF
.p2align 2
_$s11MyTestClassAAC15extensionMethodyyF:
.cfi_startproc
ret
.cfi_endproc
.section __TEXT,__objc_methname,cstring_literals
"L_selector_data(init)":
.asciz "init"
.section __DATA,__objc_selrefs,literal_pointers,no_dead_strip
.p2align 3, 0x0
"L_selector(init)":
.quad "L_selector_data(init)"
.section __TEXT,__objc_methname,cstring_literals
"L_selector_data(dealloc)":
.asciz "dealloc"
.section __DATA,__objc_selrefs,literal_pointers,no_dead_strip
.p2align 3, 0x0
"L_selector(dealloc)":
.quad "L_selector_data(dealloc)"
.private_extern _$s11MyTestClassAACAA0A8ProtocolAAMc
.section __TEXT,__const
.globl _$s11MyTestClassAACAA0A8ProtocolAAMc
.p2align 2, 0x0
_$s11MyTestClassAACAA0A8ProtocolAAMc:
.long _$s11MyTestClass0A8ProtocolMp-_$s11MyTestClassAACAA0A8ProtocolAAMc
.long (_$s11MyTestClassAACMn-_$s11MyTestClassAACAA0A8ProtocolAAMc)-4
.long (_$s11MyTestClassAACAA0A8ProtocolAAWP-_$s11MyTestClassAACAA0A8ProtocolAAMc)-8
.long 0
.private_extern _$s11MyTestClassAACAA0A8ProtocolAAWP
.section __DATA,__const
.globl _$s11MyTestClassAACAA0A8ProtocolAAWP
.p2align 3, 0x0
_$s11MyTestClassAACAA0A8ProtocolAAWP:
.quad _$s11MyTestClassAACAA0A8ProtocolAAMc
.quad _$s11MyTestClassAACAA0A8ProtocolA2aCP14protocolMethodyyFTW
.section __TEXT,__swift5_entry,regular,no_dead_strip
.p2align 2, 0x0
l_entry_point:
.long _main-l_entry_point
.long 0
.private_extern "_symbolic $s11MyTestClass0A8ProtocolP"
.section __TEXT,__swift5_typeref
.globl "_symbolic $s11MyTestClass0A8ProtocolP"
.weak_definition "_symbolic $s11MyTestClass0A8ProtocolP"
.p2align 1, 0x0
"_symbolic $s11MyTestClass0A8ProtocolP":
.ascii "$s11MyTestClass0A8ProtocolP"
.byte 0
.section __TEXT,__swift5_fieldmd
.p2align 2, 0x0
_$s11MyTestClass0A8Protocol_pMF:
.long "_symbolic $s11MyTestClass0A8ProtocolP"-_$s11MyTestClass0A8Protocol_pMF
.long 0
.short 4
.short 12
.long 0
.section __TEXT,__const
l_.str.11.MyTestClass:
.asciz "MyTestClass"
.private_extern _$s11MyTestClassMXM
.section __TEXT,__constg_swiftt
.globl _$s11MyTestClassMXM
.weak_definition _$s11MyTestClassMXM
.p2align 2, 0x0
_$s11MyTestClassMXM:
.long 0
.long 0
.long (l_.str.11.MyTestClass-_$s11MyTestClassMXM)-8
.section __TEXT,__const
l_.str.10.MyProtocol:
.asciz "MyProtocol"
.private_extern _$s11MyTestClass0A8ProtocolMp
.section __TEXT,__constg_swiftt
.globl _$s11MyTestClass0A8ProtocolMp
.p2align 2, 0x0
_$s11MyTestClass0A8ProtocolMp:
.long 65603
.long (_$s11MyTestClassMXM-_$s11MyTestClass0A8ProtocolMp)-4
.long (l_.str.10.MyProtocol-_$s11MyTestClass0A8ProtocolMp)-8
.long 0
.long 1
.long 0
.long 17
.long 0
.private_extern _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
.section __DATA,__data
.globl _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
.p2align 3, 0x0
_OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass:
.quad _OBJC_METACLASS_$_NSObject
.quad _OBJC_METACLASS_$_NSObject
.quad __objc_empty_cache
.quad 0
.quad __METACLASS_DATA__TtC11MyTestClass11MyTestClass
.section __TEXT,__cstring,cstring_literals
.p2align 4, 0x0
l_.str.30._TtC11MyTestClass11MyTestClass:
.asciz "_TtC11MyTestClass11MyTestClass"
.section __DATA,__objc_const
.p2align 3, 0x0
__METACLASS_DATA__TtC11MyTestClass11MyTestClass:
.long 129
.long 40
.long 40
.long 0
.quad 0
.quad l_.str.30._TtC11MyTestClass11MyTestClass
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.section __TEXT,__cstring,cstring_literals
"l_.str.7.@16@0:8":
.asciz "@16@0:8"
.section __DATA,__objc_data
.p2align 3, 0x0
__INSTANCE_METHODS__TtC11MyTestClass11MyTestClass:
.long 24
.long 1
.quad "L_selector_data(init)"
.quad "l_.str.7.@16@0:8"
.quad _$s11MyTestClassAACABycfcTo
.p2align 3, 0x0
__DATA__TtC11MyTestClass11MyTestClass:
.long 128
.long 8
.long 8
.long 0
.quad 0
.quad l_.str.30._TtC11MyTestClass11MyTestClass
.quad __INSTANCE_METHODS__TtC11MyTestClass11MyTestClass
.quad 0
.quad 0
.quad 0
.quad 0
.private_extern "_symbolic So8NSObjectC"
.section __TEXT,__swift5_typeref
.globl "_symbolic So8NSObjectC"
.weak_definition "_symbolic So8NSObjectC"
.p2align 1, 0x0
"_symbolic So8NSObjectC":
.ascii "So8NSObjectC"
.byte 0
.private_extern _$s11MyTestClassAACMn
.section __TEXT,__constg_swiftt
.globl _$s11MyTestClassAACMn
.p2align 2, 0x0
_$s11MyTestClassAACMn:
.long 2147483728
.long (_$s11MyTestClassMXM-_$s11MyTestClassAACMn)-4
.long (l_.str.11.MyTestClass-_$s11MyTestClassAACMn)-8
.long (_$s11MyTestClassAACMa-_$s11MyTestClassAACMn)-12
.long (_$s11MyTestClassAACMF-_$s11MyTestClassAACMn)-16
.long ("_symbolic So8NSObjectC"-_$s11MyTestClassAACMn)-20
.long 3
.long 11
.long 1
.long 0
.long 10
.long 10
.long 1
.long 16
.long (_$s11MyTestClassAAC14protocolMethodyyF-_$s11MyTestClassAACMn)-56
.section __DATA,__objc_data
.p2align 3, 0x0
_$s11MyTestClassAACMf:
.quad 0
.quad _$s11MyTestClassAACfD
.quad _$sBOWV
.quad _OBJC_METACLASS_$__TtC11MyTestClass11MyTestClass
.quad _OBJC_CLASS_$_NSObject
.quad __objc_empty_cache
.quad 0
.quad __DATA__TtC11MyTestClass11MyTestClass+2
.long 0
.long 0
.long 8
.short 7
.short 0
.long 112
.long 24
.quad _$s11MyTestClassAACMn
.quad 0
.quad _$s11MyTestClassAAC14protocolMethodyyF
.private_extern "_symbolic _____ 11MyTestClassAAC"
.section __TEXT,__swift5_typeref
.globl "_symbolic _____ 11MyTestClassAAC"
.weak_definition "_symbolic _____ 11MyTestClassAAC"
.p2align 1, 0x0
"_symbolic _____ 11MyTestClassAAC":
.byte 1
.long (_$s11MyTestClassAACMn-"_symbolic _____ 11MyTestClassAAC")-1
.byte 0
.section __TEXT,__swift5_fieldmd
.p2align 2, 0x0
_$s11MyTestClassAACMF:
.long "_symbolic _____ 11MyTestClassAAC"-_$s11MyTestClassAACMF
.long ("_symbolic So8NSObjectC"-_$s11MyTestClassAACMF)-4
.short 7
.short 12
.long 0
.section __TEXT,__swift5_protos
.p2align 2, 0x0
l_$s11MyTestClass0A8ProtocolHr:
.long _$s11MyTestClass0A8ProtocolMp-l_$s11MyTestClass0A8ProtocolHr
.section __TEXT,__swift5_proto
.p2align 2, 0x0
l_$s11MyTestClassAACAA0A8ProtocolAAHc:
.long _$s11MyTestClassAACAA0A8ProtocolAAMc-l_$s11MyTestClassAACAA0A8ProtocolAAHc
.section __TEXT,__swift5_types
.p2align 2, 0x0
l_$s11MyTestClassAACHn:
.long _$s11MyTestClassAACMn-l_$s11MyTestClassAACHn
.private_extern ___swift_reflection_version
.section __TEXT,__const
.globl ___swift_reflection_version
.weak_definition ___swift_reflection_version
.p2align 1, 0x0
___swift_reflection_version:
.short 3
.section __DATA,__objc_classlist,regular,no_dead_strip
.p2align 3, 0x0
_objc_classes_$s11MyTestClassAACN:
.quad _$s11MyTestClassAACN
.no_dead_strip _main
.no_dead_strip l_entry_point
.no_dead_strip _$s11MyTestClass0A8Protocol_pMF
.no_dead_strip _$s11MyTestClassAACMF
.no_dead_strip __swift_FORCE_LOAD_$_swiftFoundation_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftDarwin_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftObjectiveC_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftCoreFoundation_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftDispatch_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftXPC_$_MyTestClass
.no_dead_strip __swift_FORCE_LOAD_$_swiftIOKit_$_MyTestClass
.no_dead_strip l_$s11MyTestClass0A8ProtocolHr
.no_dead_strip l_$s11MyTestClassAACAA0A8ProtocolAAHc
.no_dead_strip l_$s11MyTestClassAACHn
.no_dead_strip ___swift_reflection_version
.no_dead_strip _objc_classes_$s11MyTestClassAACN
.section __DATA,__objc_imageinfo,regular,no_dead_strip
L_OBJC_IMAGE_INFO:
.long 0
.long 100665152
.globl _$s11MyTestClass0A8ProtocolTL
.private_extern _$s11MyTestClass0A8ProtocolTL
.alt_entry _$s11MyTestClass0A8ProtocolTL
.set _$s11MyTestClass0A8ProtocolTL, (_$s11MyTestClass0A8ProtocolMp+24)-8
.globl _$s11MyTestClassAAC14protocolMethodyyFTq
.private_extern _$s11MyTestClassAAC14protocolMethodyyFTq
.alt_entry _$s11MyTestClassAAC14protocolMethodyyFTq
.set _$s11MyTestClassAAC14protocolMethodyyFTq, _$s11MyTestClassAACMn+52
.globl _$s11MyTestClassAACN
.private_extern _$s11MyTestClassAACN
.alt_entry _$s11MyTestClassAACN
.set _$s11MyTestClassAACN, _$s11MyTestClassAACMf+24
.globl _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
.private_extern _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass
.set _OBJC_CLASS_$__TtC11MyTestClass11MyTestClass, _$s11MyTestClassAACN
.weak_reference __swift_FORCE_LOAD_$_swiftFoundation
.weak_reference __swift_FORCE_LOAD_$_swiftDarwin
.weak_reference __swift_FORCE_LOAD_$_swiftObjectiveC
.weak_reference __swift_FORCE_LOAD_$_swiftCoreFoundation
.weak_reference __swift_FORCE_LOAD_$_swiftDispatch
.weak_reference __swift_FORCE_LOAD_$_swiftXPC
.weak_reference __swift_FORCE_LOAD_$_swiftIOKit
.subsections_via_symbols
_OBJC_CLASS_$_NSObject:
_OBJC_METACLASS_$_NSObject:
__objc_empty_cache:
_$sBOWV:
.quad 0