@@ -38,6 +38,16 @@ pub fn get_class() -> *mut () {
3838 VAL
3939}
4040
41+ #[ no_mangle]
42+ pub fn get_class_again ( ) -> * mut ( ) {
43+ // Codegen should de-duplicate this class with the one from get_class above.
44+ unsafe extern "C" {
45+ #[ rustc_objc_class = "MyClass" ]
46+ safe static VAL : * mut ( ) ;
47+ }
48+ VAL
49+ }
50+
4151#[ no_mangle]
4252pub fn get_selector ( ) -> * mut ( ) {
4353 unsafe extern "C" {
@@ -47,7 +57,36 @@ pub fn get_selector() -> *mut () {
4757 VAL
4858}
4959
60+ #[ no_mangle]
61+ pub fn get_selector_again ( ) -> * mut ( ) {
62+ // Codegen should de-duplicate this selector with the one from get_selector above.
63+ unsafe extern "C" {
64+ #[ rustc_objc_selector = "myMethod" ]
65+ safe static VAL : * mut ( ) ;
66+ }
67+ VAL
68+ }
69+
70+ #[ no_mangle]
71+ pub fn get_other_class ( ) -> * mut ( ) {
72+ unsafe extern "C" {
73+ #[ rustc_objc_class = "OtherClass" ]
74+ safe static VAL : * mut ( ) ;
75+ }
76+ VAL
77+ }
78+
79+ #[ no_mangle]
80+ pub fn get_other_selector ( ) -> * mut ( ) {
81+ unsafe extern "C" {
82+ #[ rustc_objc_selector = "otherMethod" ]
83+ safe static VAL : * mut ( ) ;
84+ }
85+ VAL
86+ }
87+
5088// CHECK: %struct._class_t = type { ptr, ptr, ptr, ptr, ptr }
89+
5190// CHECK: @"OBJC_CLASS_$_MyClass" = external global %struct._class_t
5291// CHECK: @"OBJC_CLASSLIST_REFERENCES_$_.{{[0-9]+}}" = internal global ptr @"OBJC_CLASS_$_MyClass", section "__DATA,__objc_classrefs,regular,no_dead_strip",
5392// x86_64_macos-SAME: align 8
@@ -57,6 +96,8 @@ pub fn get_selector() -> *mut () {
5796// armv7s_ios-SAME: align 4
5897// aarch64_ios-SAME: align 8
5998// aarch64_ios_sim-SAME: align 8
99+ // CHECK-NOT: @"OBJC_CLASS_$_MyClass"
100+ // CHECK-NOT: @"OBJC_CLASSLIST_REFERENCES_$_
60101
61102// CHECK: @OBJC_METH_VAR_NAME_.{{[0-9]+}} = private unnamed_addr constant [9 x i8] c"myMethod\00", section "__TEXT,__objc_methname,cstring_literals", align 1
62103// CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = internal externally_initialized global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__DATA,__objc_selrefs,literal_pointers,no_dead_strip",
@@ -67,6 +108,49 @@ pub fn get_selector() -> *mut () {
67108// armv7s_ios-SAME: align 4
68109// aarch64_ios-SAME: align 8
69110// aarch64_ios_sim-SAME: align 8
111+ // CHECK-NOT: @OBJC_METH_VAR_NAME_
112+ // CHECK-NOT: @OBJC_SELECTOR_REFERENCES_
113+
114+ // CHECK: @"OBJC_CLASS_$_OtherClass" = external global %struct._class_t
115+ // CHECK: @"OBJC_CLASSLIST_REFERENCES_$_.{{[0-9]+}}" = internal global ptr @"OBJC_CLASS_$_OtherClass", section "__DATA,__objc_classrefs,regular,no_dead_strip",
116+ // x86_64_macos-SAME: align 8
117+ // aarch64_macos-SAME: align 8
118+ // i386_ios-SAME: align 4
119+ // x86_64_ios-SAME: align 8
120+ // armv7s_ios-SAME: align 4
121+ // aarch64_ios-SAME: align 8
122+ // aarch64_ios_sim-SAME: align 8
123+
124+ // CHECK: @OBJC_METH_VAR_NAME_.{{[0-9]+}} = private unnamed_addr constant [12 x i8] c"otherMethod\00", section "__TEXT,__objc_methname,cstring_literals", align 1
125+ // CHECK: @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}} = internal externally_initialized global ptr @OBJC_METH_VAR_NAME_.{{[0-9]+}}, section "__DATA,__objc_selrefs,literal_pointers,no_dead_strip",
126+ // x86_64_macos-SAME: align 8
127+ // aarch64_macos-SAME: align 8
128+ // i386_ios-SAME: align 4
129+ // x86_64_ios-SAME: align 8
130+ // armv7s_ios-SAME: align 4
131+ // aarch64_ios-SAME: align 8
132+ // aarch64_ios_sim-SAME: align 8
133+
134+ // CHECK: @get_class_again = unnamed_addr alias ptr (), ptr @get_class
135+ // CHECK: @get_selector_again = unnamed_addr alias ptr (), ptr @get_selector
136+
137+ // CHECK: load ptr, ptr @"OBJC_CLASSLIST_REFERENCES_$_.{{[0-9]+}}",
138+ // x86_64_macos-SAME: align 8
139+ // aarch64_macos-SAME: align 8
140+ // i386_ios-SAME: align 4
141+ // x86_64_ios-SAME: align 8
142+ // armv7s_ios-SAME: align 4
143+ // aarch64_ios-SAME: align 8
144+ // aarch64_ios_sim-SAME: align 8
145+
146+ // CHECK: load ptr, ptr @OBJC_SELECTOR_REFERENCES_.{{[0-9]+}},
147+ // x86_64_macos-SAME: align 8
148+ // aarch64_macos-SAME: align 8
149+ // i386_ios-SAME: align 4
150+ // x86_64_ios-SAME: align 8
151+ // armv7s_ios-SAME: align 4
152+ // aarch64_ios-SAME: align 8
153+ // aarch64_ios_sim-SAME: align 8
70154
71155// CHECK: load ptr, ptr @"OBJC_CLASSLIST_REFERENCES_$_.{{[0-9]+}}",
72156// x86_64_macos-SAME: align 8
0 commit comments