Skip to content

ICE: this path should not cause illegal move #20801

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
Zoxc opened this issue Jan 9, 2015 · 9 comments · Fixed by #22143
Closed

ICE: this path should not cause illegal move #20801

Zoxc opened this issue Jan 9, 2015 · 9 comments · Fixed by #22143
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@Zoxc
Copy link
Contributor

Zoxc commented Jan 9, 2015

Input:

struct T(u8);

fn t() -> *mut T {
    unsafe { 0u8 as *mut T }
}

fn main() {
    let a = unsafe { *t() };
}

Output:

$ rustc ../test.rs 
../test.rs:9:19: 9:23 error: internal compiler error: this path should not cause illegal move
../test.rs:9    let a = unsafe { *t() };
                                 ^~~~
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<Any>', /Users/John/Documents/dev/rust/src/libsyntax/diagnostic.rs:123

stack backtrace:
   1:        0x10f825b75 - sys::backtrace::write::h757d4037fec4513elCt
   2:        0x10f84800f - failure::on_fail::he99e1d2cd81a67a80Hz
   3:        0x10f7b3c8a - rt::unwind::begin_unwind_inner::hede15ebc165353e0Qpz
   4:        0x10d508707 - rt::unwind::begin_unwind::h5150449308391082809
   5:        0x10d50869c - diagnostic::SpanHandler::span_bug::h1cc7aa850b4525b9nQF
   6:        0x10c93bc1d - session::Session::span_bug::h9dff6f0c981e0b95mRq
   7:        0x10c547999 - borrowck::build_borrowck_dataflow_data::hbfab9f3785e58ec8QRe
   8:        0x10c5432fb - borrowck::borrowck_fn::h9d4d5a57ec1e26a2cPe
   9:        0x10c5440f2 - borrowck::borrowck_item::hd3de64f0b51b624a9Ne
  10:        0x10c54461f - borrowck::check_crate::hab49ad1d67fb67e9ZIe
  11:        0x10c09e8aa - driver::phase_3_run_analysis_passes::h3bf5eb3f470c8788gwa
  12:        0x10c082d90 - driver::compile_input::h63293298907e332cxba
  13:        0x10c14e7ba - monitor::unboxed_closure.22558
  14:        0x10c14cf15 - thunk::F.Invoke<A, R>::invoke::h15985566512806182469
  15:        0x10c14bcf0 - rt::unwind::try::try_fn::h5957420952141477940
  16:        0x10f8b1189 - rust_try_inner
  17:        0x10f8b1176 - rust_try
  18:        0x10c14c3ec - thunk::F.Invoke<A, R>::invoke::h12578415658120090831
  19:        0x10f835814 - sys::thread::thread_start::he6c5dcba45c95bf2drw
  20:     0x7fff933e22fc - _pthread_body
  21:     0x7fff933e2279 - _pthread_body
@kmcallister kmcallister added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Jan 9, 2015
@tupshin
Copy link

tupshin commented Jan 11, 2015

FWIW, I get the same compiler bug when building my repo at the following commit:
https://github.com/tupshin/cql-ffi/tree/3e3bc9cf2143d7539996204e78b93110c90799e3
Workaround applied with the subsequent commit:
https://github.com/tupshin/cql-ffi/tree/72fd94079f336b8863b3d920f499150d8f5493f8

@tupshin
Copy link

tupshin commented Jan 27, 2015

Bump? I'm finding this increasingly hard to (elegantly, at least) to work around in my FFI code. Any idea what's going on with this?

@tupshin
Copy link

tupshin commented Feb 1, 2015

This is now a full on blocker. Pausing until this is fixed.

@kornelski
Copy link
Contributor

I've ran into this as well:

pub struct Foo;
pub fn destroy(handle: *mut Foo) {
    unsafe {
        *handle;
    }
}

internal compiler error: this path should not cause illegal move
:6 *handle;

rustc 1.0.0-nightly (1d00c54 2015-01-30 19:56:34 +0000)

@jakerr
Copy link
Contributor

jakerr commented Feb 2, 2015

I hit this as well when playing with an example I found on Stack Overflow

Playground half way through changing some type signatures from the SO example: http://is.gd/pBUABw

pub extern "C" fn destroy(ptr:*mut Dramatic) {
    // ...
    let obj: Box<Dramatic> = unsafe { ::std::mem::transmute(*ptr) };
    // ...
}

@lambdaxymox
Copy link

I ran this error as well. Here is an MCVE that reproduces it.

struct Foo;

fn foo(handle: &mut Foo) {
    unsafe {
        let temp: *mut Foo = &mut *handle;
        *temp;
    }
}

// This also causes the ICE.
/*
fn foo_immut(handle: & Foo) {
    unsafe {
        let temp: *const Foo = &*handle;
        *temp;
    }
}
*/
fn main() {

}

Here is the output from rustc:

$ RUST_BACKTRACE=1 rustc foo.rs
foo.rs:6:9: 6:14 error: internal compiler error: this path should not cause illegal move
foo.rs:6         *temp;
                 ^~~~~
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<Any>', /home/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:129

stack backtrace:
   1:     0x7f2c8bc66870 - sys::backtrace::write::h26b40214a7757117H8t
   2:     0x7f2c8bc89be0 - failure::on_fail::h7a79bf921b6662fbzkB
   3:     0x7f2c8bbf61f0 - rt::unwind::begin_unwind_inner::hfe1c0e12f5e834cfAZA
   4:     0x7f2c89011ac0 - rt::unwind::begin_unwind::h18088714452159156163
   5:     0x7f2c89011a50 - diagnostic::SpanHandler::span_bug::hb14d16d0c0973c4aeFE
   6:     0x7f2c89b0c7b0 - session::Session::span_bug::h25b7c4dc09b94f23P3o
   7:     0x7f2c8add3640 - borrowck::build_borrowck_dataflow_data::h15eb45fb12515356kPe
   8:     0x7f2c8add00e0 - borrowck::borrowck_fn::hb69937ff45b88f0dHMe
   9:     0x7f2c8add10d0 - borrowck::borrowck_item::hf7ef73cfdfac21f5FLe
  10:     0x7f2c8add1770 - borrowck::check_crate::h7ef96074ee6de484xGe
  11:     0x7f2c8c1f1f50 - driver::phase_3_run_analysis_passes::h3a3da09b2eae9713NFa
  12:     0x7f2c8c1d9330 - driver::compile_input::h802d2a6759ac022fBba
  13:     0x7f2c8c29f230 - run_compiler::h4517938d3296cfc5l9b
  14:     0x7f2c8c29d8c0 - thunk::F.Invoke<A, R>::invoke::h5452441173088021345
  15:     0x7f2c8c29c7f0 - rt::unwind::try::try_fn::h8490101008730471441
  16:     0x7f2c8bcf4f60 - rust_try_inner
  17:     0x7f2c8bcf4f50 - rust_try
  18:     0x7f2c8c29caa0 - thunk::F.Invoke<A, R>::invoke::h13338196279056651375
  19:     0x7f2c8bc763b0 - sys::thread::thread_start::h395b8c6815673c5cN3w
  20:     0x7f2c85e9afe0 - start_thread
  21:     0x7f2c8b878859 - __clone
  22:                0x0 - <unknown>

Here is the rustc version:

$ rustc --verbose --version
rustc 1.0.0-nightly (1d00c545e 2015-01-30 19:56:34 +0000)
binary: rustc
commit-hash: 1d00c545ede609b9d43fdf9f252c15da5a66dac7
commit-date: 2015-01-30 19:56:34 +0000
host: x86_64-unknown-linux-gnu
release: 1.0.0-nightly

@Hansyperman
Copy link

Still in the latest nightly today:

/*
Output is:

hans@yperman:~/proggies/th$ RUST_BACKTRACE=1 rustc --verbose src/main_crash.rs
src/main_crash.rs:48:12: 48:32 error: internal compiler error: this path should not cause illegal move
src/main_crash.rs:48 x=(*(someMap.unwrap()));
^~~~~~~~~~~~~~~~~~~~
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:129

stack backtrace:
1: 0x7fce722a2e80 - sys::backtrace::write::h84a1347ec8a3d425Aru
2: 0x7fce722c64a0 - failure::on_fail::h1cb2299eb5e255ae9GB
3: 0x7fce722312d0 - rt::unwind::begin_unwind_inner::ha34a1c7f0630f466IlB
4: 0x7fce6f663bf0 - rt::unwind::begin_unwind::h12804436560652988965
5: 0x7fce6f663b80 - diagnostic::SpanHandler::span_bug::h7782d96edbc369daAME
6: 0x7fce7016d860 - session::Session::span_bug::hdac738587fe4342308p
7: 0x7fce71442720 - borrowck::build_borrowck_dataflow_data::h9045861811b22014EVe
8: 0x7fce7143f1c0 - borrowck::borrowck_fn::h36353c72fe383ef91Se
9: 0x7fce714401b0 - borrowck::borrowck_item::hb95afd845c4698caZRe
10: 0x7fce71440850 - borrowck::check_crate::hfcab8da4b1fb581bRMe
11: 0x7fce72833710 - driver::phase_3_run_analysis_passes::h198ed79d6101094dtGa
12: 0x7fce7281a2b0 - driver::compile_input::h08caf95be513bd6bBba
13: 0x7fce728e4dd0 - run_compiler::hf1a36c26381910e09ac
14: 0x7fce728e3460 - thunk::F.Invoke<A, R>::invoke::h6996223324138754953
15: 0x7fce728e2390 - rt::unwind::try::try_fn::h16059966258548481805
16: 0x7fce72331910 - rust_try_inner
17: 0x7fce72331900 - rust_try
18: 0x7fce728e2640 - thunk::F.Invoke<A, R>::invoke::h12998514134271589737
19: 0x7fce722b2ca0 - sys::thread::thread_start::h756cedb2df1b4200Pnx
20: 0x7fce6c4e8a80 - start_thread
21: 0x0 -

hans@yperman:/proggies/th$ uname -a
Linux yperman 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt2-1
bpo70+1 (2014-12-08) x86_64 GNU/Linux
hans@yperman:~/proggies/th$ rustc --version
rustc 1.0.0-nightly (eaf4c5c 2015-02-02 15:04:54 +0000)

*_/
static mut someMap: std::option::Option<_mut std::collections::HashMap<String,i64>>=None;

fn new(name:&str)-> i64{
let x;
unsafe{
x=(*(someMap.unwrap()));
}
return 0;
}

pub fn main() {
}

@thepowersgang
Copy link
Contributor

Note - While the ICE is a bug, the above code is already invalid. All versions attempt to move out of a raw pointer (which is invalid, in the same way as moving out of a &-ptr is). The correct way of "moving" out of a raw pointer is to use ::std::ptr::read

@pnkfelix
Copy link
Member

(i am fixing this to produce proper compiler error now. its a one line fix.)

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.

9 participants