Skip to content

Commit b09ad20

Browse files
committed
Remove old dispatch prototypes to avoid a transmute.
This fixes the warning appearing from rust-lang/rust#31710. The objc_msgSend functions aren't intended to be used directly, so since OSX 10.8 they are defined empty like this as long as you don't define OBJC_OLD_DISPATCH_PROTOTYPES.
1 parent 97463bf commit b09ad20

File tree

5 files changed

+31
-35
lines changed

5 files changed

+31
-35
lines changed

src/message/arm.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,37 @@ pub fn msg_send_fn<R: Any>(obj: *mut Object, _: Sel) -> (Imp, *mut Object) {
1010
// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf
1111

1212
extern {
13-
fn objc_msgSend(obj: *mut Object, op: Sel, ...) -> *mut Object;
14-
fn objc_msgSend_stret(obj: *mut Object, op: Sel, ...);
13+
fn objc_msgSend();
14+
fn objc_msgSend_stret();
1515
}
1616

1717
let type_id = TypeId::of::<R>();
1818
let msg_fn = if mem::size_of::<R>() <= 4 ||
1919
type_id == TypeId::of::<i64>() ||
2020
type_id == TypeId::of::<u64>() ||
2121
type_id == TypeId::of::<f64>() {
22-
unsafe { mem::transmute(objc_msgSend) }
22+
objc_msgSend
2323
} else {
24-
unsafe { mem::transmute(objc_msgSend_stret) }
24+
objc_msgSend_stret
2525
};
2626

2727
(msg_fn, obj)
2828
}
2929

3030
pub fn msg_send_super_fn<R: Any>(sup: &Super, _: Sel) -> (Imp, *mut Object) {
3131
extern {
32-
fn objc_msgSendSuper(sup: *const Super, op: Sel, ...) -> *mut Object;
33-
fn objc_msgSendSuper_stret(sup: *const Super, op: Sel, ... );
32+
fn objc_msgSendSuper();
33+
fn objc_msgSendSuper_stret();
3434
}
3535

3636
let type_id = TypeId::of::<R>();
3737
let msg_fn = if mem::size_of::<R>() <= 4 ||
3838
type_id == TypeId::of::<i64>() ||
3939
type_id == TypeId::of::<u64>() ||
4040
type_id == TypeId::of::<f64>() {
41-
unsafe { mem::transmute(objc_msgSendSuper) }
41+
objc_msgSendSuper
4242
} else {
43-
unsafe { mem::transmute(objc_msgSendSuper_stret) }
43+
objc_msgSendSuper_stret
4444
};
4545

4646
(msg_fn, sup as *const Super as *mut Object)

src/message/arm64.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::mem;
2-
31
use runtime::{Object, Imp, Sel};
42
use super::Super;
53

@@ -8,18 +6,16 @@ pub fn msg_send_fn<R>(obj: *mut Object, _: Sel) -> (Imp, *mut Object) {
86
// https://twitter.com/gparker/status/378079715824660480
97

108
extern {
11-
fn objc_msgSend(obj: *mut Object, op: Sel, ...) -> *mut Object;
9+
fn objc_msgSend();
1210
}
1311

14-
let msg_fn = unsafe { mem::transmute(objc_msgSend) };
15-
(msg_fn, obj)
12+
(objc_msgSend, obj)
1613
}
1714

1815
pub fn msg_send_super_fn<R>(sup: &Super, _: Sel) -> (Imp, *mut Object) {
1916
extern {
20-
fn objc_msgSendSuper(sup: *const Super, op: Sel, ...) -> *mut Object;
17+
fn objc_msgSendSuper();
2118
}
2219

23-
let msg_fn = unsafe { mem::transmute(objc_msgSendSuper) };
24-
(msg_fn, sup as *const Super as *mut Object)
20+
(objc_msgSendSuper, sup as *const Super as *mut Object)
2521
}

src/message/x86.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,36 @@ pub fn msg_send_fn<R: Any>(obj: *mut Object, _: Sel) -> (Imp, *mut Object) {
1111
// https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html
1212

1313
extern {
14-
fn objc_msgSend(obj: *mut Object, op: Sel, ...) -> *mut Object;
15-
fn objc_msgSend_fpret(obj: *mut Object, op: Sel, ...) -> f64;
16-
fn objc_msgSend_stret(obj: *mut Object, op: Sel, ...);
14+
fn objc_msgSend();
15+
fn objc_msgSend_fpret();
16+
fn objc_msgSend_stret();
1717
}
1818

1919
let type_id = TypeId::of::<R>();
2020
let size = mem::size_of::<R>();
2121
let msg_fn = if type_id == TypeId::of::<f32>() ||
2222
type_id == TypeId::of::<f64>() {
23-
unsafe { mem::transmute(objc_msgSend_fpret) }
23+
objc_msgSend_fpret
2424
} else if size == 0 || size == 1 || size == 2 || size == 4 || size == 8 {
25-
unsafe { mem::transmute(objc_msgSend) }
25+
objc_msgSend
2626
} else {
27-
unsafe { mem::transmute(objc_msgSend_stret) }
27+
objc_msgSend_stret
2828
};
2929

3030
(msg_fn, obj)
3131
}
3232

3333
pub fn msg_send_super_fn<R: Any>(sup: &Super, _: Sel) -> (Imp, *mut Object) {
3434
extern {
35-
fn objc_msgSendSuper(sup: *const Super, op: Sel, ...) -> *mut Object;
36-
fn objc_msgSendSuper_stret(sup: *const Super, op: Sel, ... );
35+
fn objc_msgSendSuper();
36+
fn objc_msgSendSuper_stret();
3737
}
3838

3939
let size = mem::size_of::<R>();
4040
let msg_fn = if size == 0 || size == 1 || size == 2 || size == 4 || size == 8 {
41-
unsafe { mem::transmute(objc_msgSendSuper) }
41+
objc_msgSendSuper
4242
} else {
43-
unsafe { mem::transmute(objc_msgSendSuper_stret) }
43+
objc_msgSendSuper_stret
4444
};
4545

4646
(msg_fn, sup as *const Super as *mut Object)

src/message/x86_64.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,29 @@ pub fn msg_send_fn<R>(obj: *mut Object, _: Sel) -> (Imp, *mut Object) {
1010
// http://people.freebsd.org/~obrien/amd64-elf-abi.pdf
1111

1212
extern {
13-
fn objc_msgSend(obj: *mut Object, op: Sel, ...) -> *mut Object;
14-
fn objc_msgSend_stret(obj: *mut Object, op: Sel, ...);
13+
fn objc_msgSend();
14+
fn objc_msgSend_stret();
1515
}
1616

1717
let msg_fn = if mem::size_of::<R>() <= 16 {
18-
unsafe { mem::transmute(objc_msgSend) }
18+
objc_msgSend
1919
} else {
20-
unsafe { mem::transmute(objc_msgSend_stret) }
20+
objc_msgSend_stret
2121
};
2222

2323
(msg_fn, obj)
2424
}
2525

2626
pub fn msg_send_super_fn<R>(sup: &Super, _: Sel) -> (Imp, *mut Object) {
2727
extern {
28-
fn objc_msgSendSuper(sup: *const Super, op: Sel, ...) -> *mut Object;
29-
fn objc_msgSendSuper_stret(sup: *const Super, op: Sel, ... );
28+
fn objc_msgSendSuper();
29+
fn objc_msgSendSuper_stret();
3030
}
3131

3232
let msg_fn = if mem::size_of::<R>() <= 16 {
33-
unsafe { mem::transmute(objc_msgSendSuper) }
33+
objc_msgSendSuper
3434
} else {
35-
unsafe { mem::transmute(objc_msgSendSuper_stret) }
35+
objc_msgSendSuper_stret
3636
};
3737

3838
(msg_fn, sup as *const Super as *mut Object)

src/runtime.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ pub struct Object {
6767
}
6868

6969
/// A pointer to the start of a method implementation.
70-
pub type Imp = unsafe extern fn(*mut Object, Sel, ...) -> *mut Object;
70+
pub type Imp = unsafe extern fn();
7171

7272
#[link(name = "objc", kind = "dylib")]
7373
extern {

0 commit comments

Comments
 (0)