Skip to content

ICE: translating unsupported cast #24100

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
swizard0 opened this issue Apr 5, 2015 · 3 comments · Fixed by #25038
Closed

ICE: translating unsupported cast #24100

swizard0 opened this issue Apr 5, 2015 · 3 comments · Fixed by #25038
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@swizard0
Copy link

swizard0 commented Apr 5, 2015

Example code:

let mem: &[u8] = &[48, 49];
let ptr = mem.as_ptr() as *const str;
let s = unsafe { &*ptr };

Error message:

error: internal compiler error: translating unsupported cast: *const u8 (cast_pointer) -> *const str (cast_other)
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Box<Any>', /Users/swizard/distr/rust/src/libsyntax/diagnostic.rs:190
stack backtrace:
   1:        0x105f01957 - sys::backtrace::write::h49bc1af3bff4a6e3DJC
   2:        0x105f2f873 - panicking::on_panic::h22918d2e20ddf008PxI
   3:        0x105e53cbe - rt::unwind::begin_unwind_inner::hb0f5c720a6629d10qfI
   4:        0x10563b19e - rt::unwind::begin_unwind::h13792904101880946349
   5:        0x10563b9e9 - diagnostic::Handler::bug::h8d018cb8efa3e647EsB
   6:        0x102f32627 - session::Session::bug::he24b74119a1174bbFPq
   7:        0x1029c1358 - trans::expr::trans_imm_cast::h0dc669e5f6c002d8nKj
   8:        0x1029a82e6 - trans::expr::trans_unadjusted::h86976c6745580e14TXh
   9:        0x10295a53c - trans::expr::trans_into::hefe6c24c6801eb34gfh
  10:        0x102a7ad1a - trans::_match::mk_binding_alloca::h16979327121447448331
  11:        0x10295977f - trans::base::init_local::h45ac8135c05a5146NMs
  12:        0x10295b342 - trans::controlflow::trans_block::h8c650fbe27085d2cH6d
  13:        0x102a3b4f5 - trans::base::trans_closure::h46864fd94aa01bc0Qtt
  14:        0x102942c83 - trans::base::trans_fn::h2ca708b7c163d918zEt
  15:        0x10294463e - trans::monomorphize::monomorphic_fn::h95fbd095b702f0baYtd
  16:        0x102989b81 - trans::callee::trans_fn_ref_with_substs::h1994bdb61afbe636Zbg
  17:        0x102988a2e - trans::meth::trans_static_method_callee::hf8b89488d2117b8dNAy
  18:        0x1029859ca - trans::callee::trans::hbb34a5eec289d1c9jPf
  19:        0x10299c33b - trans::callee::trans_call_inner::h8192340426532286712
  20:        0x1029aa770 - trans::expr::trans_rvalue_dps_unadjusted::h27b9d0cd52a394f1mti
  21:        0x10295a51c - trans::expr::trans_into::hefe6c24c6801eb34gfh
  22:        0x102a7ad1a - trans::_match::mk_binding_alloca::h16979327121447448331
  23:        0x10295977f - trans::base::init_local::h45ac8135c05a5146NMs
  24:        0x10295b342 - trans::controlflow::trans_block::h8c650fbe27085d2cH6d
  25:        0x102a3b4f5 - trans::base::trans_closure::h46864fd94aa01bc0Qtt
  26:        0x102942c83 - trans::base::trans_fn::h2ca708b7c163d918zEt
  27:        0x102944592 - trans::monomorphize::monomorphic_fn::h95fbd095b702f0baYtd
  28:        0x102989b81 - trans::callee::trans_fn_ref_with_substs::h1994bdb61afbe636Zbg
  29:        0x102987f57 - trans::callee::trans_fn_ref::h63f04e40db0908572Zf
  30:        0x102985bd0 - trans::callee::trans::hbb34a5eec289d1c9jPf
  31:        0x10299c33b - trans::callee::trans_call_inner::h8192340426532286712
  32:        0x1029aa770 - trans::expr::trans_rvalue_dps_unadjusted::h27b9d0cd52a394f1mti
  33:        0x10295a51c - trans::expr::trans_into::hefe6c24c6801eb34gfh
  34:        0x102959492 - trans::controlflow::trans_stmt_semi::he0a71a03e8e22f97L5d
  35:        0x10295b317 - trans::controlflow::trans_block::h8c650fbe27085d2cH6d
  36:        0x1029a9bad - trans::expr::trans_rvalue_dps_unadjusted::h27b9d0cd52a394f1mti
  37:        0x10295a51c - trans::expr::trans_into::hefe6c24c6801eb34gfh
  38:        0x10295b6a0 - trans::controlflow::trans_block::h8c650fbe27085d2cH6d
  39:        0x102a3b4f5 - trans::base::trans_closure::h46864fd94aa01bc0Qtt
  40:        0x102942c83 - trans::base::trans_fn::h2ca708b7c163d918zEt
  41:        0x10293d4bd - trans::base::trans_item::h46b9d96ec061ef10P2t
  42:        0x102a43fc7 - trans::base::trans_crate::h2a7f765e28da6987lZu
  43:        0x10236a82c - driver::phase_4_translate_to_llvm::hb12845c52d9d2a39aOa
  44:        0x10234217e - driver::compile_input::hf700a572a1239378Qba
  45:        0x1023ffd35 - run_compiler::h2254195776d5d4d5S4b
  46:        0x1023fd502 - boxed::F.FnBox<A>::call_box::h6405845031818806926
  47:        0x1023fc9f7 - rt::unwind::try::try_fn::h692286709647191617
  48:        0x105fbc4b8 - rust_try_inner
  49:        0x105fbc4a5 - rust_try
  50:        0x1023fccea - boxed::F.FnBox<A>::call_box::h15513867904557068020
  51:        0x105f18d5d - sys::thread::create::thread_start::h320d70da47133ff2weH
  52:     0x7fff8f86f267 - _pthread_body
  53:     0x7fff8f86f1e4 - _pthread_start

Rust:

rustc 1.0.0-dev (b3c5507f3 2015-04-05) (built 2015-04-05)

OS:

Darwin pair 14.1.0 Darwin Kernel Version 14.1.0: Thu Feb 26 19:26:47 PST 2015; root:xnu-2782.10.73~1/RELEASE_X86_64 x86_64
@jdm jdm added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Apr 6, 2015
@goertzenator
Copy link

Me too:

Crate: https://github.com/goertzenator/liblrust

Output: https://gist.github.com/goertzenator/912f010da6f2ae243336

Rust:

rustc 1.0.0-beta (9854143cb 2015-04-02) (built 2015-04-02)

OS:

Linux goertzen-G550JK 3.16.0-33-generic #44-Ubuntu SMP Thu Mar 12 12:19:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

@robn
Copy link

robn commented Apr 14, 2015

Me three, with this trivial program:

#[derive(Debug)]
struct S {
    v: String,
}

fn main() {
    let x = S { v: "hello".to_string() };
    println!("{:?}", x as S);
}
$ RUST_BACKTRACE=1 rustc test.rs 
error: internal compiler error: translating unsupported cast: S (cast_other) -> S (cast_other)
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Box<Any>', /home/robn/code/rust/rust/src/libsyntax/diagnostic.rs:190

stack backtrace:
   1:     0x7f9ef6fdb0b8 - sys::backtrace::write::hc7bf68ee23aa2a47IJC
   2:     0x7f9ef7006460 - panicking::on_panic::hae54fd167ccd0c87sXI
   3:     0x7f9ef6f3e193 - rt::unwind::begin_unwind_inner::h04b19af4046d9402ACI
   4:     0x7f9ef430657d - rt::unwind::begin_unwind::h14358179414781977900
   5:     0x7f9ef4306cd2 - diagnostic::Handler::bug::h6b05bef8ecda0ec4ZsB
   6:     0x7f9ef4d1980b - session::Session::bug::h7677b9d1b16c63a2oYq
   7:     0x7f9ef668358a - trans::expr::trans_imm_cast::h3c51f5e7bab523a6nKj
   8:     0x7f9ef666b3b9 - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
   9:     0x7f9ef6622944 - trans::expr::trans::h5fac271f51fcff39Blh
  10:     0x7f9ef6682347 - trans::expr::trans_addr_of::h6ef6c8160ed58d06fij
  11:     0x7f9ef666b67f - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
  12:     0x7f9ef6620ff9 - trans::expr::trans_into::h03dc3dcf7bddc72dgfh
  13:     0x7f9ef669e4bd - trans::expr::trans_adt::h390328ce7ac619d86Yi
  14:     0x7f9ef666ee4e - trans::expr::trans_rvalue_dps_unadjusted::ha57d2ad1e4a3199amti
  15:     0x7f9ef666b1e0 - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
  16:     0x7f9ef6622944 - trans::expr::trans::h5fac271f51fcff39Blh
  17:     0x7f9ef6719a60 - trans::_match::trans_match_inner::hc4bc6db15d8e6ce3gUw
  18:     0x7f9ef666ca8c - trans::expr::trans_rvalue_dps_unadjusted::ha57d2ad1e4a3199amti
  19:     0x7f9ef666b1e0 - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
  20:     0x7f9ef6622944 - trans::expr::trans::h5fac271f51fcff39Blh
  21:     0x7f9ef6682347 - trans::expr::trans_addr_of::h6ef6c8160ed58d06fij
  22:     0x7f9ef666b67f - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
  23:     0x7f9ef6622944 - trans::expr::trans::h5fac271f51fcff39Blh
  24:     0x7f9ef665a28f - trans::callee::trans_args::hea46cd98019ae23d9Rg
  25:     0x7f9ef6660d24 - trans::callee::trans_call_inner::h8036123679852670048
  26:     0x7f9ef666d583 - trans::expr::trans_rvalue_dps_unadjusted::ha57d2ad1e4a3199amti
  27:     0x7f9ef666b1e0 - trans::expr::trans_unadjusted::h50be0c1e615b9b53TXh
  28:     0x7f9ef6622944 - trans::expr::trans::h5fac271f51fcff39Blh
  29:     0x7f9ef665a28f - trans::callee::trans_args::hea46cd98019ae23d9Rg
  30:     0x7f9ef6660d24 - trans::callee::trans_call_inner::h8036123679852670048
  31:     0x7f9ef666d583 - trans::expr::trans_rvalue_dps_unadjusted::ha57d2ad1e4a3199amti
  32:     0x7f9ef6620fd8 - trans::expr::trans_into::h03dc3dcf7bddc72dgfh
  33:     0x7f9ef6620056 - trans::controlflow::trans_stmt_semi::hd76f97e4ff316b93L5d
  34:     0x7f9ef6621ca5 - trans::controlflow::trans_block::h2574d0aaf248b2a2H6d
  35:     0x7f9ef66f8d2f - trans::base::trans_closure::h4bbbebda4a6a2eaeQtt
  36:     0x7f9ef660ac76 - trans::base::trans_fn::hc59e1e3af67fd20dzEt
  37:     0x7f9ef660590f - trans::base::trans_item::h0c811983fce37f04P2t
  38:     0x7f9ef670126c - trans::base::trans_crate::h84a63b946dfd0dd2lZu
  39:     0x7f9ef766e84f - driver::phase_4_translate_to_llvm::h0f768fc8e75d0e95aOa
  40:     0x7f9ef764629b - driver::compile_input::h154756c108de519fQba
  41:     0x7f9ef76fd675 - run_compiler::hd45ff49ff4db7f9fV4b
  42:     0x7f9ef76faf8d - boxed::F.FnBox<A>::call_box::h998211653744645471
  43:     0x7f9ef76fa4c9 - rt::unwind::try::try_fn::h5486996895865591730
  44:     0x7f9ef708b748 - rust_try_inner
  45:     0x7f9ef708b735 - rust_try
  46:     0x7f9ef76fa79b - boxed::F.FnBox<A>::call_box::h4941640570998788665
  47:     0x7f9ef6ff1471 - sys::thread::create::thread_start::haf7c3f703308e235ExH
  48:     0x7f9ef0f480a3 - start_thread
  49:     0x7f9ef6ba804c - __clone
  50:                0x0 - <unknown>

Self-built rustc from the 1.0.0-beta commit:

$ rustc --version --verbose
rustc 1.0.0-dev (9854143cb 2015-04-02) (built 2015-04-07)
binary: rustc
commit-hash: 9854143cba679834bc4ef932858cd5303f015a0e
commit-date: 2015-04-02
build-date: 2015-04-07
host: x86_64-unknown-linux-gnu
release: 1.0.0-dev

@polyfractal
Copy link

Adding another report, with a similar setup. Encountered this in my code, boiled it down to this test...looks very similar to @robn's ICE, since it is trying to cast "same" -> "same".

Seems to only happen when trying to cast a struct to itself with as. If you use primitive types, there is no ICE. I tried deriving Copy/Clone to see if that was the problem, but it still threw an ICE.

error: internal compiler error: translating unsupported cast: TestStruct (cast_other) -> TestStruct (cast_other)
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Box<Any>', /Users/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-mac/build/src/libsyntax/diagnostic.rs:230

stack backtrace:
   1:        0x10dd99b3f - sys::backtrace::write::h7c4b7b31b5a98994KVr
   2:        0x10dda2242 - panicking::on_panic::h130becb52f065864NVv
   3:        0x10dd5e985 - rt::unwind::begin_unwind_inner::hf2ec506d50a3ea22wDv
   4:        0x10d5692de - rt::unwind::begin_unwind::h10963008848674724601
   5:        0x10d569a82 - diagnostic::Handler::bug::h7f6411f5b5710a68VxB
   6:        0x10af2d887 - session::Session::bug::h67c3e63982ede886xWp
   7:        0x10a767a0c - trans::expr::trans_imm_cast::h56c659d7a3aa3946OkC
   8:        0x10a75bbde - trans::expr::trans_unadjusted::h16ccd3176676f118vxA
   9:        0x10a72fdf7 - trans::expr::trans_into::hb0f7fdd5a2a9abdbj4z
  10:        0x10a6b1109 - trans::controlflow::trans_block::h12567c1fc6ee8337H1u
  11:        0x10a6afa06 - trans::base::trans_closure::ha53aa9eb2a9bf670gEh
  12:        0x10a6b173e - trans::base::trans_fn::h8f58e16c0621df33YOh
  13:        0x10a6f2f25 - trans::monomorphize::monomorphic_fn::h9b2fe76155400f16iAJ
  14:        0x10a6e33b7 - trans::callee::trans_fn_ref_with_substs::ha369033cd198b04eBGn
  15:        0x10a6e1e52 - trans::callee::trans_fn_ref::h20eb8b04123e4545Gun
  16:        0x10a6f6feb - trans::meth::trans_method_callee::h0e2799d89ca0fda9jxI
  17:        0x10a6f5533 - trans::callee::trans_call_inner::h2848324853079840396
  18:        0x10a75c79b - trans::expr::trans_rvalue_dps_unadjusted::hadab5746c39f5e9fY2A
  19:        0x10a72fdd7 - trans::expr::trans_into::hb0f7fdd5a2a9abdbj4z
  20:        0x10a7b0c61 - trans::_match::mk_binding_alloca::h3749212929604063812
  21:        0x10a6a0b39 - trans::base::init_local::hcee21b7a4917a72djXg
  22:        0x10a6b0df3 - trans::controlflow::trans_block::h12567c1fc6ee8337H1u
  23:        0x10a6afa06 - trans::base::trans_closure::ha53aa9eb2a9bf670gEh
  24:        0x10a6b173e - trans::base::trans_fn::h8f58e16c0621df33YOh
  25:        0x10a6b4d38 - trans::base::trans_item::he86179308be326c4adi
  26:        0x10a6c3b80 - trans::base::trans_crate::h350105e1ee0f6a06a2i
  27:        0x10a531c2e - driver::phase_4_translate_to_llvm::h7039638042d67b1enOa
  28:        0x10a50a7a9 - driver::compile_input::h65cad254ac62afa6Qba
  29:        0x10a5c9613 - run_compiler::hbd6a992aacaf1248F4b
  30:        0x10a5c6d7a - boxed::F.FnBox<A>::call_box::h9480122591250505076
  31:        0x10a5c62c7 - rt::unwind::try::try_fn::h5956310425634165804
  32:        0x10de24618 - rust_try_inner
  33:        0x10de24605 - rust_try
  34:        0x10a5c659e - boxed::F.FnBox<A>::call_box::h8195565033996650298
  35:        0x10dda0c3d - sys::thread::Thread::new::thread_start::h8efe8b1c3780385fvYu
  36:     0x7fff92e872fb - _pthread_body
  37:     0x7fff92e87278 - _pthread_start
rustc 1.1.0-nightly (5fb0259ed 2015-04-26) (built 2015-04-26)
binary: rustc
commit-hash: 5fb0259edfbc4034cfbcf827ab91d6118b7ae848
commit-date: 2015-04-26
build-date: 2015-04-26
host: x86_64-apple-darwin
release: 1.1.0-nightly
pub struct Consumer<T> {
    vec: Vec<T>
}

impl<T> Consumer<T> {
    pub fn pop(&mut self) -> T {
        self.vec.pop().unwrap() as T // <--- Removing "as T" fixes the ICE
    }
}

// #[derive(Copy, Clone)]  // <-- tried to add Copy/Clone, does not fix ICE
struct TestStruct {
    a: u32
}

impl TestStruct {
    pub fn new() -> TestStruct {
        TestStruct { a: 19 }
    }
}


#[test]
fn test_struct() {
    let mut c = Consumer {
        vec: vec![TestStruct::new(), TestStruct::new()]
        //vec: vec![0,1,2,3]        // <-- works fine
    };

    let t: TestStruct = c.pop();
}

bluss pushed a commit to bluss/rust that referenced this issue May 1, 2015
Fixes ICEs where non-fat pointers and scalars are cast to fat pointers,

Fixes rust-lang#21397
Fixes rust-lang#22955
Fixes rust-lang#23237
Fixes rust-lang#24100
bors added a commit that referenced this issue May 2, 2015
typeck: Make sure casts from other types to fat pointers are illegal

Fixes ICEs where non-fat pointers and scalars are cast to fat pointers,

Fixes #21397
Fixes #22955
Fixes #23237
Fixes #24100
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

Successfully merging a pull request may close this issue.

5 participants