Skip to content

Commit dcee327

Browse files
committed
rustc: remove some unnecessary transmutes.
These can all be done by implicit or explicit &T -> *T casts, which are more restricted and so are safer.
1 parent c4afcf4 commit dcee327

File tree

3 files changed

+4
-12
lines changed

3 files changed

+4
-12
lines changed

src/librustc/middle/trans/build.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use syntax::codemap::Span;
2020
use middle::trans::builder::Builder;
2121
use middle::trans::type_::Type;
2222

23-
use std::cast;
2423
use std::libc::{c_uint, c_ulonglong, c_char};
2524

2625
pub fn terminate(cx: &Block, _: &str) {
@@ -623,9 +622,7 @@ pub fn Phi(cx: &Block, Ty: Type, vals: &[ValueRef], bbs: &[BasicBlockRef]) -> Va
623622
pub fn AddIncomingToPhi(phi: ValueRef, val: ValueRef, bb: BasicBlockRef) {
624623
unsafe {
625624
if llvm::LLVMIsUndef(phi) == lib::llvm::True { return; }
626-
let valptr = cast::transmute(&val);
627-
let bbptr = cast::transmute(&bb);
628-
llvm::LLVMAddIncoming(phi, valptr, bbptr, 1 as c_uint);
625+
llvm::LLVMAddIncoming(phi, &val, &bb, 1 as c_uint);
629626
}
630627
}
631628

src/librustc/middle/trans/builder.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use middle::trans::base;
1717
use middle::trans::common::*;
1818
use middle::trans::machine::llalign_of_pref;
1919
use middle::trans::type_::Type;
20-
use std::cast;
2120
use std::hashmap::HashMap;
2221
use std::libc::{c_uint, c_ulonglong, c_char};
2322
use syntax::codemap::Span;
@@ -30,10 +29,8 @@ pub struct Builder<'a> {
3029
// This is a really awful way to get a zero-length c-string, but better (and a
3130
// lot more efficient) than doing str::as_c_str("", ...) every time.
3231
pub fn noname() -> *c_char {
33-
unsafe {
34-
static cnull: uint = 0u;
35-
cast::transmute(&cnull)
36-
}
32+
static cnull: c_char = 0;
33+
&cnull as *c_char
3734
}
3835

3936
impl<'a> Builder<'a> {

src/librustc/middle/trans/common.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ use util::ppaux::Repr;
3030

3131
use arena::TypedArena;
3232
use std::c_str::ToCStr;
33-
use std::cast::transmute;
34-
use std::cast;
3533
use std::cell::{Cell, RefCell};
3634
use std::hashmap::HashMap;
3735
use std::libc::{c_uint, c_longlong, c_ulonglong, c_char};
@@ -668,7 +666,7 @@ pub fn C_array(ty: Type, elts: &[ValueRef]) -> ValueRef {
668666

669667
pub fn C_bytes(bytes: &[u8]) -> ValueRef {
670668
unsafe {
671-
let ptr = cast::transmute(bytes.as_ptr());
669+
let ptr = bytes.as_ptr() as *c_char;
672670
return llvm::LLVMConstStringInContext(base::task_llcx(), ptr, bytes.len() as c_uint, True);
673671
}
674672
}

0 commit comments

Comments
 (0)