Skip to content

ICE when using a parametrized trait-object inside of a parametrized struct. #8664

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
sebcrozet opened this issue Aug 21, 2013 · 2 comments
Closed
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@sebcrozet
Copy link
Contributor

The following code gives an ICE. It worked fine before PR #8519 landed. Note that the trait object is parametrized by A2, which is the second type parameter of the structure Impl. The fact that is is the second type parameter is important: there is no ICE when it is the first (see the two last examples).

pub trait Trait<A> {
    fn doit(&self);
}

pub struct Impl<A1, A2, A3> {
    /*
     * With A2 we get the ICE:
     * task <unnamed> failed at 'index out of bounds: the len is 1 but the index is 1', /home/tortue/rust_compiler_newest/src/librustc/middle/subst.rs:58
     */
    t: ~Trait<A2>
}

impl<A1, A2, A3> Impl<A1, A2, A3> {
    pub fn step(&self) {
        self.t.doit()
    }
}

fn main() {
} 

The following fails too, but this time the out of bound index is 2, and the trait object is parametrized by the third parameter of the structure Impl:

pub trait Trait<A> {
    fn doit(&self);
}

pub struct Impl<A1, A2, A3> {
    /*
     * With A3 we get the ICE:
     * task <unnamed> failed at 'index out of bounds: the len is 1 but the index is 2', /home/tortue/rust_compiler_newest/src/librustc/middle/subst.rs:58
     */
    t: ~Trait<A3>
}

impl<A1, A2, A3> Impl<A1, A2, A3> {
    pub fn step(&self) {
        self.t.doit()
    }
}

fn main() {
} 

This one works fine, as the first parameter is used:

pub trait Trait<A> {
    fn doit(&self);
}

pub struct Impl<A1, A2, A3> {
    // With A1, it works fine.
    t: ~Trait<A1>
}

impl<A1, A2, A3> Impl<A1, A2, A3> {
    pub fn step(&self) {
        self.t.doit()
    }
}

fn main() {
} 

I guess the struct type parameter position affects something on trait method call resolution. Here is a backtrace of rust_begin_unwind (provided by @huonw) for the first example:

#0  rust_begin_unwind (token=839147) at /home/huon/rust/src/rt/rust_builtin.cpp:561
#1  0x00007ffff7831648 in rt::task::__extensions__::meth_25362::begin_unwind::_7c12263797ed078::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#2  0x00007ffff7830a43 in sys::begin_unwind_::_89e154cd0915671::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#3  0x00007ffff77a658e in unstable::lang::fail_::_89e154cd0915671::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#4  0x00007ffff77aef47 in unstable::lang::fail_bounds_check::_7112ff25e39642a2::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#5  0x00007ffff632abc5 in middle::subst::__extensions__::meth_47604::effectfulSubst::_8d15b09d6d1feaa7::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#6  0x00007ffff632b09b in middle::subst::__extensions__::effectfulSubst::anon::expr_fn_47615 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#7  0x00007ffff6150bf2 in vec::__extensions__::map_24158::_af9d6bbe4c97e84::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#8  0x00007ffff6307c11 in middle::ty::fold_regions_and_ty::fold_substs::_f87632aa5a6bf38c::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#9  0x00007ffff6306d34 in middle::ty::fold_regions_and_ty::_eec113fb083f535::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#10 0x00007ffff632aada in middle::subst::__extensions__::meth_47604::effectfulSubst::_8d15b09d6d1feaa7::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#11 0x00007ffff6308f6f in middle::subst::__extensions__::meth_45441::subst::_8d15b09d6d1feaa7::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#12 0x00007ffff61ad3e3 in middle::ty::subst::_3eca2167a74aedda::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#13 0x00007ffff6416265 in middle::typeck::check::method::__extensions__::meth_55388::consider_candidates::_434c75b2fd612a1c::_0$x2e8$x2dpre ()
   from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#14 0x00007ffff641105f in middle::typeck::check::method::__extensions__::meth_55337::search_for_method::_4d1e96ca73d452a3::_0$x2e8$x2dpre ()
   from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#15 0x00007ffff6411e16 in middle::typeck::check::method::__extensions__::meth_55351::search_for_some_kind_of_autorefd_method::_bcb6f7e4b367e548::_0$x2e8$x2dpre ()
   from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#16 0x00007ffff640ab18 in middle::typeck::check::method::__extensions__::meth_55207::search::_4d1e96ca73d452a3::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#17 0x00007ffff6408824 in middle::typeck::check::method::lookup::_4b77c03a44123db0::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#18 0x00007ffff644c625 in middle::typeck::check::check_expr_with_unifier::check_method_call::_b1665ac8f3af21dd::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#19 0x00007ffff643fc98 in middle::typeck::check::check_expr_with_unifier::_954efbe3785ec583::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#20 0x00007ffff644976d in middle::typeck::check::check_expr_with_opt_hint::_ebadc6b67a7a724::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#21 0x00007ffff645e94f in middle::typeck::check::check_block_with_expected::anon::expr_fn_57414 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#22 0x00007ffff6421d50 in middle::typeck::check::__extensions__::with_region_lb_55877::_116d8e3dbf7558d8::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#23 0x00007ffff6422aad in middle::typeck::check::check_block_with_expected::_d9a834828355583::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#24 0x00007ffff641f12c in middle::typeck::check::check_fn::_82b74e20bdb3c03d::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#25 0x00007ffff641e581 in middle::typeck::check::check_bare_fn::_cb394ca6cb630bf::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#26 0x00007ffff64231aa in middle::typeck::check::check_method::_7c2fbbeb61a180d6::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#27 0x00007ffff641be7f in middle::typeck::check::check_item::_a8862943ecd2909a::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#28 0x00007ffff641af23 in middle::typeck::check::__extensions__::meth_55693::visit_item::_7941de97d3394078::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#29 0x00007ffff641e34e in middle::typeck::check::check_item_types::_4079c2c77b544bea::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#30 0x00007ffff6530701 in util::common::time_63654::_c4d0513e54dc658e::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#31 0x00007ffff6530197 in middle::typeck::check_crate::_cd4774fc30e32eb3::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#32 0x00007ffff6795f95 in driver::driver::phase_3_run_analysis_passes::_c49682fbf209272::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#33 0x00007ffff6798a28 in driver::driver::compile_input::_995b2797bc6e6f9::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#34 0x00007ffff67c3d11 in run_compiler::_ab6ccab0bc93e7d::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#35 0x00007ffff67d53de in main::anon::expr_fn_96265 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#36 0x00007ffff67d38d5 in monitor::anon::expr_fn_96139 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#37 0x00007ffff67d104e in task::__extensions__::try_95621::anon::expr_fn_95821 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc-d3cb8c2ccd84a7a7-0.8-pre.so
#38 0x00007ffff7805bb5 in task::spawn::spawn_raw_newsched::anon::expr_fn_21475 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#39 0x00007ffff784d23e in rt::task::__extensions__::build_start_wrapper::anon::anon::expr_fn_28759 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#40 0x00007ffff784c0bd in rt::task::__extensions__::run::anon::expr_fn_28681 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#41 0x00007ffff784d53d in rt::task::__extensions__::try_fn::_4edaa01d4dd56e2::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#42 0x00007ffff432bf84 in rust_try (f=<optimized out>, fptr=<optimized out>, env=<optimized out>) at /home/huon/rust/src/rt/rust_builtin.cpp:552
#43 0x00007ffff784bf74 in rt::task::__extensions__::meth_28679::try::_199ab8d6eb226980::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#44 0x00007ffff784be55 in rt::task::__extensions__::meth_28677::run::_199ab8d6eb226980::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#45 0x00007ffff784cf7c in rt::task::__extensions__::build_start_wrapper::anon::expr_fn_28743 () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
#46 0x00007ffff7883349 in rt::context::__extensions__::task_start_wrapper::_d625afdc49afb93::_0$x2e8$x2dpre () from /home/huon/rust/x86_64-unknown-linux-gnu/stage1/bin/../lib/libstd-6c65cf4b443341b1-0.8-pre.so
@huonw
Copy link
Member

huonw commented Aug 21, 2013

cc @msullivan.

I tested with 6a88415 and it works fine, but d4d856b ICEs (and gives the backtrace above).

@msullivan
Copy link
Contributor

Oh, welp. This is a silly bug. Product of my sloppy thinking. Sigh.

flip1995 pushed a commit to flip1995/rust that referenced this issue Apr 21, 2022
Allow passing `--remove` to `cargo dev setup <SUBCOMMAND>`

changelog: none

Allows passing `--remove` to `cargo dev setup <SUBCOMMAND>` as an alternative to `cargo dev remove ...`

Fixes rust-lang/rust-clippy#8663
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