Skip to content

ICE: translating unsupported cast: *const str (cast_other) -> *const u8 (cast_pointer) #19424

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
antekone opened this issue Nov 30, 2014 · 5 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@antekone
Copy link

The code is probably invalid, but still generates an ICE.

$ rustc src/ice.rs
src/ice.rs:3:9: 3:12 warning: unused variable: `ptr`, #[warn(unused_variables)] on by default
src/ice.rs:3     let ptr = string as *const _ as *const u8;
                     ^~~
error: internal compiler error: translating unsupported cast: *const str (cast_other) -> *const u8     (cast_pointer)
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' panicked at 'Box<Any>', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/diagnostic.rs:180

The code is very short:

fn main() {
    let string: &str = "test1";
    let ptr = string as *const _ as *const u8;
}

Backtrace:

$ gdb --args rustc src/ice.rs       
Reading symbols from rustc...(no debugging symbols found)...done.
(gdb) b rust_panic
Function "rust_panic" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (rust_panic) pending.
(gdb) r
src/ice.rs:3:9: 3:12 warning: unused variable: `ptr`, #[warn(unused_variables)] on by default
src/ice.rs:3     let ptr = string as *const _ as *const u8;
                 ^~~
error: internal compiler error: translating unsupported cast: *const str (cast_other) -> *const u8 (cast_pointer)

Breakpoint 1, 0x00007ffff7111440 in rust_panic () from /usr/local/lib/librustrt-4e7c5e5c.so
(gdb) bt
#0  0x00007ffff7111440 in rust_panic () from /usr/local/lib/librustrt-4e7c5e5c.so
#1  0x00007ffff7111b06 in unwind::begin_unwind_inner::hf044c6d185c5aca3tad () from /usr/local/lib/librustrt-4e7c5e5c.so
#2  0x00007ffff4e51529 in unwind::begin_unwind::h5761018185178914378 () from /usr/local/lib/libsyntax-4e7c5e5c.so
#3  0x00007ffff4e51c84 in diagnostic::Handler::bug::hfb9fa81ad3c3172cL3F () from /usr/local/lib/libsyntax-4e7c5e5c.so
#4  0x00007ffff5e5c935 in session::Session::bug::h176dff5b0ea34ba0Lt1 () from /usr/local/lib/librustc-4e7c5e5c.so
#5  0x00007ffff7932899 in trans::expr::trans_imm_cast::ha29135b513d0179aTLk () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#6  0x00007ffff7925c63 in trans::expr::trans_unadjusted::h4dd3a502f0c61d18iJi () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#7  0x00007ffff78e6287 in trans::expr::trans_into::h9ab7d00213095796hQh () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#8  0x00007ffff79de1bd in trans::_match::store_local::closure.49047 () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#9  0x00007ffff79dd5a4 in trans::_match::mk_binding_alloca::h3960520261142917360 () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#10 0x00007ffff7990094 in trans::_match::store_local::he5f9566f16d0e035w9x () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#11 0x00007ffff78e582e in trans::base::init_local::h305f837109a50408MIt () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#12 0x00007ffff78e4e42 in trans::controlflow::trans_stmt::h8e6bafcdf7128142cXd () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#13 0x00007ffff78e64f9 in trans::controlflow::trans_block::h7ed275868dcb5977k2d () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#14 0x00007ffff7998c40 in trans::base::trans_closure::h45d1af6bd984feb85Au () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#15 0x00007ffff78d9587 in trans::base::trans_fn::he30b79362e00aa4eVMu () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#16 0x00007ffff78d679e in trans::base::trans_item::hd3d39cc929783f51F8u () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#17 0x00007ffff79a21f8 in trans::base::trans_crate::h9cc619fc129272e2Z6v () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#18 0x00007ffff7a4cc45 in driver::driver::phase_4_translate_to_llvm::he2f0cbfd547d4bd4UtS () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#19 0x00007ffff7a3c4b5 in driver::driver::compile_input::h3764e7506ecf962760R () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#20 0x00007ffff7abfa87 in driver::run_compiler::hd5386abc6d794eaceZT () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#21 0x00007ffff7abe0ac in driver::run::closure.59712 () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#22 0x00007ffff78cbdfb in task::TaskBuilder::try_future::closure.38971 () from /usr/local/lib/librustc_trans-4e7c5e5c.so
#23 0x00007ffff743d43d in task::TaskBuilder::spawn_internal::closure.24316 () from /usr/local/lib/libstd-4e7c5e5c.so
#24 0x00007ffff710f4d2 in task::Task::spawn::closure.6079 () from /usr/local/lib/librustrt-4e7c5e5c.so
#25 0x00007ffff7169e3c in rust_try_inner () from /usr/local/lib/librustrt-4e7c5e5c.so
#26 0x00007ffff7169e26 in rust_try () from /usr/local/lib/librustrt-4e7c5e5c.so
#27 0x00007ffff710f583 in unwind::try::hc6a5679abcd17f59OYc () from /usr/local/lib/librustrt-4e7c5e5c.so
#28 0x00007ffff710f37c in task::Task::run::h56429f146a5c97ecX5b () from /usr/local/lib/librustrt-4e7c5e5c.so
#29 0x00007ffff710efc8 in task::Task::spawn::closure.6055 () from /usr/local/lib/librustrt-4e7c5e5c.so
#30 0x00007ffff7110d25 in thread::thread_start::hce41c81aad9e2f16Kpc () from /usr/local/lib/librustrt-4e7c5e5c.so
#31 0x00007ffff1c2c314 in start_thread () from /usr/lib/libpthread.so.0
#32 0x00007ffff6de63ed in clone () from /usr/lib/libc.so.6

Version info:

$ rustc --version=verbose
rustc 0.13.0-nightly (395901393 2014-11-24 00:46:30 +0000)
binary: rustc
commit-hash: 395901393c369c910a8ae36ace71402cb206d217
commit-date: 2014-11-24 00:46:30 +0000
host: x86_64-unknown-linux-gnu
release: 0.13.0-nightly

Happens also in:

$ rustc --version=verbose                                 
rustc 0.13.0-nightly (fac5a0767 2014-11-26 22:37:06 +0000)
binary: rustc
commit-hash: fac5a07679cac21a580badc84b755b8df0f975cf
commit-date: 2014-11-26 22:37:06 +0000
host: x86_64-unknown-linux-gnu
release: 0.13.0-nightly
@japaric
Copy link
Member

japaric commented Nov 30, 2014

Duplicate of #18396

@flaper87 flaper87 added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Dec 13, 2014
@flaper87
Copy link
Contributor

Another case was reported in #18396 which is basically the same example:

fn main() {
    let foo: &mut [u8] = &mut [1,2,3];
    foo as *mut [u8] as *mut u8;
}
error: internal compiler error: translating unsupported cast: *mut [u8] (cast_other) -> *mut u8 (cast_pointer)
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'Box<Any>', /build/rust-git/src/rust/src/libsyntax/diagnostic.rs:175

@Blei
Copy link
Contributor

Blei commented Feb 1, 2015

Possible duplicate of #15355

@Hansyperman
Copy link

Another one, probably also invalid code. It rusn on a nightly of last week or so.

pub trait Trait{
fn something();
}

static mut staticvar:*mut u8=0 as *mut u8;

pub fn func(env:&mut Trait){
unsafe{
let env2:*mut Trait=env;
staticvar=env2 as *mut u8;

}

}

pub fn main(){}
/*
$ RUST_BACKTRACE=1 rustc src/testje.rs
error: internal compiler error: translating unsupported cast: *mut Trait + 'static (cast_other) -> *mut u8 (cast_pointer)
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with RUST_BACKTRACE=1 for a backtrace
thread 'rustc' panicked at 'Box', /home/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:189

stack backtrace:
1: 0x7f79b28d05b0 - sys::backtrace::write::h0cbfc88baae43aa021y
2: 0x7f79b28f49b0 - failure::on_fail::h0a7ead13585065c0rcH
3: 0x7f79b2852970 - rt::unwind::begin_unwind_inner::h5389a239af7b06eeMQG
4: 0x7f79afc28d80 - rt::unwind::begin_unwind::h6290790253480038265
5: 0x7f79afc29540 - diagnostic::Handler::bug::he11a02ced7d59aaaq9E
6: 0x7f79b091c550 - session::Session::bug::h882451eebbf062afXcr
7: 0x7f79b15edf40 - trans::expr::trans_imm_cast::h14ef54f0be458053Ljk
8: 0x7f79b15d4ee0 - trans::expr::trans_unadjusted::hf6315b53521e627beqi
9: 0x7f79b158dcb0 - trans::expr::trans::h4aa11cd527e88cd0dIh
10: 0x7f79b15d4ee0 - trans::expr::trans_unadjusted::hf6315b53521e627beqi
11: 0x7f79b158dcb0 - trans::expr::trans::h4aa11cd527e88cd0dIh
12: 0x7f79b15db050 - trans::expr::trans_rvalue_stmt_unadjusted::hdb847b98cb6a7ecaRSi
13: 0x7f79b158cb20 - trans::expr::trans_into::h792bd9b430d8f7dfJEh
14: 0x7f79b158bfc0 - trans::controlflow::trans_stmt_semi::hf566cf4106125cabKce
15: 0x7f79b158d130 - trans::controlflow::trans_block::hd445a33426df7637Bde
16: 0x7f79b15d5ac0 - trans::expr::trans_rvalue_dps_unadjusted::he15e3ebaa41399dfJYi
17: 0x7f79b158cb20 - trans::expr::trans_into::h792bd9b430d8f7dfJEh
18: 0x7f79b158d130 - trans::controlflow::trans_block::hd445a33426df7637Bde
19: 0x7f79b1658530 - trans::base::trans_closure::h899ff1df83d7583b9du
20: 0x7f79b15795e0 - trans::base::trans_fn::hc2298bc13eeb8cfappu
21: 0x7f79b1574570 - trans::base::trans_item::h03200b520668f12feOu
22: 0x7f79b165f990 - trans::base::trans_crate::ha94cd7a9cd13cad4yLv
23: 0x7f79b2ee6210 - driver::phase_4_translate_to_llvm::he09ab588c39cf70ewPa
24: 0x7f79b2ebf200 - driver::compile_input::h0eb7a1103ff8aba2Eba
25: 0x7f79b2f906e0 - run_compiler::ha9d14025fcb8e9fc5bc
26: 0x7f79b2f8ed40 - thunk::F.Invoke<A, R>::invoke::h5646167225587318028
27: 0x7f79b2f8dc30 - rt::unwind::try::try_fn::h4383208440922308355
28: 0x7f79b2960d40 - rust_try_inner
29: 0x7f79b2960d30 - rust_try
30: 0x7f79b2f8dee0 - thunk::F.Invoke<A, R>::invoke::h10387639015308431532
31: 0x7f79b28e0ea0 - sys::thread::thread_start::h5a97a888379df6e9FQC
32: 0x7f79ac906a80 - start_thread
33: 0x0 -

*/

$ rustc --version
rustc 1.0.0-nightly (a954663 2015-02-10 22:08:30 +0000)

@tamird
Copy link
Contributor

tamird commented Apr 22, 2015

No longer ICEs.

$ rustc main.rs
main.rs:3:15: 3:46 error: illegal cast; cast from fat pointer: `*const str` as `*const u8`
main.rs:3     let ptr = string as *const _ as *const u8;
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

7 participants