aboutsummaryrefslogtreecommitdiff
path: root/lld/test
diff options
context:
space:
mode:
authoralx32 <103613512+alx32@users.noreply.github.com>2024-06-13 08:06:25 -0700
committerGitHub <noreply@github.com>2024-06-13 08:06:25 -0700
commit93318a8b7369dde8762dcba0e8789b95b180e5ed (patch)
tree7464c9b54e991b18716008e1c5192a2f776b3c80 /lld/test
parentcc2dc0916ad6a00ebc9373a58854d77cf73af122 (diff)
downloadllvm-93318a8b7369dde8762dcba0e8789b95b180e5ed.zip
llvm-93318a8b7369dde8762dcba0e8789b95b180e5ed.tar.gz
llvm-93318a8b7369dde8762dcba0e8789b95b180e5ed.tar.bz2
[lld-macho] Add swift support to ObjC category merger (#95124)
Currently ObjC category merger only supports categories defined in ObjC. But swift supports generating ObjC categories also. This change adds supports for the later categories.
Diffstat (limited to 'lld/test')
-rw-r--r--lld/test/MachO/objc-category-merging-minimal.s90
1 files changed, 90 insertions, 0 deletions
diff --git a/lld/test/MachO/objc-category-merging-minimal.s b/lld/test/MachO/objc-category-merging-minimal.s
index fcd90f1..5274933 100644
--- a/lld/test/MachO/objc-category-merging-minimal.s
+++ b/lld/test/MachO/objc-category-merging-minimal.s
@@ -23,6 +23,10 @@
# RUN: llvm-objdump --objc-meta-data --macho merge_base_class_minimal_no_merge.dylib | FileCheck %s --check-prefixes=NO_MERGE_INTO_BASE
# RUN: llvm-objdump --objc-meta-data --macho merge_base_class_minimal_yes_merge.dylib | FileCheck %s --check-prefixes=YES_MERGE_INTO_BASE
+############ Test merging swift category into the base class ############
+# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o MyBaseClassSwiftExtension.o MyBaseClassSwiftExtension.s
+# RUN: %lld -arch arm64 -dylib -o merge_base_class_swift_minimal_yes_merge.dylib -objc_category_merging MyBaseClassSwiftExtension.o merge_base_class_minimal.o
+# RUN: llvm-objdump --objc-meta-data --macho merge_base_class_swift_minimal_yes_merge.dylib | FileCheck %s --check-prefixes=YES_MERGE_INTO_BASE_SWIFT
#### Check merge categories enabled ###
# Check that the original categories are not there
@@ -77,6 +81,21 @@ YES_MERGE_INTO_BASE-NEXT: name {{.*}} baseInstanceMethod
YES_MERGE_INTO_BASE-NEXT: types {{.*}} v16@0:8
YES_MERGE_INTO_BASE-NEXT: imp -[MyBaseClass baseInstanceMethod]
+
+#### Check merge swift category into base class ###
+YES_MERGE_INTO_BASE_SWIFT: _OBJC_CLASS_$_MyBaseClass
+YES_MERGE_INTO_BASE_SWIFT-NEXT: _OBJC_METACLASS_$_MyBaseClass
+YES_MERGE_INTO_BASE_SWIFT: baseMethods
+YES_MERGE_INTO_BASE_SWIFT-NEXT: entsize 24
+YES_MERGE_INTO_BASE_SWIFT-NEXT: count 2
+YES_MERGE_INTO_BASE_SWIFT-NEXT: name {{.*}} swiftMethod
+YES_MERGE_INTO_BASE_SWIFT-NEXT: types {{.*}} v16@0:8
+YES_MERGE_INTO_BASE_SWIFT-NEXT: imp _$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyFTo
+YES_MERGE_INTO_BASE_SWIFT-NEXT: name {{.*}} baseInstanceMethod
+YES_MERGE_INTO_BASE_SWIFT-NEXT: types {{.*}} v16@0:8
+YES_MERGE_INTO_BASE_SWIFT-NEXT: imp -[MyBaseClass baseInstanceMethod]
+
+
#--- a64_fakedylib.s
.section __DATA,__objc_data
@@ -279,3 +298,74 @@ L_OBJC_IMAGE_INFO:
.long 0
.long 64
.subsections_via_symbols
+
+
+#--- MyBaseClassSwiftExtension.s
+; xcrun -sdk macosx swiftc -emit-assembly MyBaseClassSwiftExtension.swift -import-objc-header YourProject-Bridging-Header.h -o MyBaseClassSwiftExtension.s
+; ================== Generated from Swift: ==================
+; import Foundation
+; extension MyBaseClass {
+; @objc func swiftMethod() {
+; }
+; }
+; ================== Generated from Swift ===================
+ .private_extern _$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyF
+ .globl _$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyF
+ .p2align 2
+_$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyF:
+ .cfi_startproc
+ mov w0, #0
+ ret
+ .cfi_endproc
+
+ .p2align 2
+_$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyFTo:
+ .cfi_startproc
+ mov w0, #0
+ ret
+ .cfi_endproc
+
+ .section __TEXT,__cstring,cstring_literals
+ .p2align 4, 0x0
+l_.str.25.MyBaseClassSwiftExtension:
+ .asciz "MyBaseClassSwiftExtension"
+
+ .section __TEXT,__objc_methname,cstring_literals
+"L_selector_data(swiftMethod)":
+ .asciz "swiftMethod"
+
+ .section __TEXT,__cstring,cstring_literals
+"l_.str.7.v16@0:8":
+ .asciz "v16@0:8"
+
+ .section __DATA,__objc_data
+ .p2align 3, 0x0
+__CATEGORY_INSTANCE_METHODS_MyBaseClass_$_MyBaseClassSwiftExtension:
+ .long 24
+ .long 1
+ .quad "L_selector_data(swiftMethod)"
+ .quad "l_.str.7.v16@0:8"
+ .quad _$sSo11MyBaseClassC0abC14SwiftExtensionE11swiftMethodyyFTo
+
+ .section __DATA,__objc_const
+ .p2align 3, 0x0
+__CATEGORY_MyBaseClass_$_MyBaseClassSwiftExtension:
+ .quad l_.str.25.MyBaseClassSwiftExtension
+ .quad _OBJC_CLASS_$_MyBaseClass
+ .quad __CATEGORY_INSTANCE_METHODS_MyBaseClass_$_MyBaseClassSwiftExtension
+ .quad 0
+ .quad 0
+ .quad 0
+ .quad 0
+ .long 60
+ .space 4
+
+ .section __DATA,__objc_catlist,regular,no_dead_strip
+ .p2align 3, 0x0
+_objc_categories:
+ .quad __CATEGORY_MyBaseClass_$_MyBaseClassSwiftExtension
+
+ .no_dead_strip _main
+ .no_dead_strip l_entry_point
+
+.subsections_via_symbols