Skip to content

compiler panic - struct function fields passed to higher order function. #23437

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
mikehadlow opened this issue Mar 17, 2015 · 1 comment
Closed
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@mikehadlow
Copy link

Just playing with higher-order functions and structs with function fields.

I tried this code:

// the main function
fn main() {

    let funcs = Funcs {
        a: Box::new( |x| { 1 + x } ),
        b: Box::new( |x| { x * 2 } )
    };

    let composed = compose(&funcs.a, &funcs.b);

    let r1: i32 = composed(3);
    let r2: i32 = composed(10);

    println!("r1 is {}", r1);
    println!("r2 is {}", r2);

}

// a higher order function
fn compose<'a, T, F: 'a, G: 'a>(f: &'a F, g: &'a G) -> Box<Fn(T) -> T + 'a>
    where
        F: Fn(T) -> T,
        G: Fn(T) -> T {

    Box::new(move |x| { f(g(x)) })
}

struct Funcs {
    a: Box<Fn(i32) -> i32>,
    b: Box<Fn(i32) -> i32>,
}

I expected to see this happen:

Compiling rust_hello v0.0.1 (file:///home/mike/source/rust_hello)
Running `target/debug/rust_hello`
r1 is 7
r2 is 21

Instead, this happened:

Compiling rust_hello v0.0.1 (file:///home/mike/source/rust_hello)
src/main.rs:10:20: 10:47 error: internal compiler error: cat_expr Errd
src/main.rs:10     let composed = compose(&funcs.a, &funcs.b);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
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/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:130

Meta

rustc --version --verbose
rustc 1.0.0-nightly (30e1f9a1c 2015-03-14) (built 2015-03-15)
binary: rustc
commit-hash: 30e1f9a1c2bf7134135800bc9afd082773defadc
commit-date: 2015-03-14
build-date: 2015-03-15
host: x86_64-unknown-linux-gnu
release: 1.0.0-nightly

Backtrace:

RUST_BACKTRACE=1 rustc src/main.rs
src/main.rs:10:20: 10:47 error: internal compiler error: cat_expr Errd
src/main.rs:10     let composed = compose(&funcs.a, &funcs.b);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
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/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:130

stack backtrace:
   1:     0x7fb896007fd4 - sys::backtrace::write::hc598c94e8fe3368fYyC
   2:     0x7fb89602dd98 - panicking::on_panic::he6f0d5fd56790ce4OGI
   3:     0x7fb895f64faa - rt::unwind::begin_unwind_inner::h0de67d11bf40bff3mnI
   4:     0x7fb8933e140d - rt::unwind::begin_unwind::h1003680148821460282
   5:     0x7fb8933e13b3 - diagnostic::SpanHandler::span_bug::h1c5c4bceba1974e2FaB
   6:     0x7fb893c98523 - session::Session::span_bug::h04e509cfca0af677Qvn
   7:     0x7fb894cc60e1 - check::regionck::visit_expr::h6d73f9ea96a73481dCd
   8:     0x7fb894cc69fa - check::regionck::visit_local::h94f330bbd6249aa8izd
   9:     0x7fb894cc18a5 - check::regionck::Rcx<'a, 'tcx>::visit_fn_body::h91c2ca9bef55fb39qed
  10:     0x7fb894d4c566 - check::check_bare_fn::ha0fa7770160c8d54b8m
  11:     0x7fb894d44681 - check::check_item::h289f0c28a59d81b7Pqn
  12:     0x7fb894e18a03 - check_crate::closure.35785
  13:     0x7fb894e1373a - check_crate::h77f9ea673c087f80O3B
  14:     0x7fb89662fbf8 - driver::phase_3_run_analysis_passes::h716709d467e74aabqGa
  15:     0x7fb896616f59 - driver::compile_input::h56dbe0e66fe8a956Rba
  16:     0x7fb8966cea42 - run_compiler::hbbbe30f1ad654d0ex2b
  17:     0x7fb8966cc88c - thunk::F.Invoke<A, R>::invoke::h9510793753674638958
  18:     0x7fb8966cb910 - rt::unwind::try::try_fn::h15118916039308917284
  19:     0x7fb89609ef58 - rust_try_inner
  20:     0x7fb89609ef45 - rust_try
  21:     0x7fb8966cbdb6 - thunk::F.Invoke<A, R>::invoke::h8595907971712275588
  22:     0x7fb89601c995 - sys::thread::thread_start::h9f0c06661d546448B1G
  23:     0x7fb88fec2181 - start_thread
  24:     0x7fb895bd647c - __clone
  25:                0x0 - <unknown>
@jdm jdm added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Mar 17, 2015
bors added a commit that referenced this issue Apr 26, 2015
An actual typeck error is the cause of many failed compilations but an
unrelated bug is being reported instead. It is triggered because a typeck
error is presumably not yet identified during compiler execution, which
would normally bypass an invariant in the presence of other errors. In
this particular situation, we delay the reporting of the bug until
abort_if_errors().

Closes #23827, closes #24356, closes #23041, closes #22897, closes #23966,
closes #24013, and closes #23729

**There is at least one situation where this bug may still be genuinely
triggered (#23437).**
@arielb1
Copy link
Contributor

arielb1 commented Jun 23, 2015

Duplicate of #25076.

@arielb1 arielb1 closed this as completed Jun 23, 2015
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

3 participants