Skip to content

error: internal compiler error: ../src/librustc_typeck/check/dropck.rs:644 #38868

Closed
@wyklq

Description

@wyklq

I tried this code:

pub struct List<T> {
    head: Link<T>,
}

type Link<T> = Option<Box<Node<T>>>;

struct Node<T> {
    elem: T,
    next: Link<T>,
}

impl<i32> List<i32> {
    pub fn new() -> Self {
        List { head: None }
    }

    pub fn push(&mut self, elem: i32) {
        let new_node = Box::new(Node {
            elem: elem,
            next: self.head.take(),
        });

        self.head = Some(new_node);
    }
    pub fn pop(&mut self) -> Option<i32> {
        self.head.take().map(|node| {
            let node = *node;
            self.head = node.next;
            node.elem
        })
    }
}

impl Drop for List<i32> {
    fn drop(&mut self) {
        let mut cur_link = self.head.take();
        while let Some(mut boxed_node) = cur_link {
            cur_link = boxed_node.next.take();
        }
    }
}


#[cfg(test)]
mod test {
    use super::List;

    #[test]
    fn basics() {
        let mut list = List::new();

        // Check empty list behaves right
        assert_eq!(list.pop(), None);

        // Populate list
        list.push(1);
        list.push(2);
        list.push(3);

        // Check normal removal
        assert_eq!(list.pop(), Some(3));
        assert_eq!(list.pop(), Some(2));

        // Push some more just to make sure nothing's corrupted
        list.push(4);
        list.push(5);

        // Check normal removal
        assert_eq!(list.pop(), Some(5));
        assert_eq!(list.pop(), Some(4));

        // Check exhaustion
        assert_eq!(list.pop(), Some(1));
        assert_eq!(list.pop(), None);
    }
}

I'd like to see if this works or not - just implement a specific type of a generic.
However, the following compilation error happened, which brings me here:

error: internal compiler error: ../src/librustc_typeck/check/dropck.rs:644: substs for an impl must map types to TyParam
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', ../src/librustc_errors/lib.rs:424
stack backtrace:
1: 0x7fb5b6e327aa - std::sys::imp::backtrace::tracing::imp::write::h917062bce4ff48c3
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42
2: 0x7fb5b6e4494f - std::panicking::default_hook::{{closure}}::h0bacac31b5ed1870
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:247
3: 0x7fb5b6e411a5 - std::panicking::default_hook::h5897799da33ece67
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:257
4: 0x7fb5b6e418b7 - std::panicking::rust_panic_with_hook::h109e116a3a861224
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:451
5: 0x7fb5b327b3ba - std::panicking::begin_panic::h7ee1a5d23402297a
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:413
6: 0x7fb5b328c64d - rustc_errors::Handler::bug::hcb152875f06770ca
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_errors/lib.rs:424
7: 0x7fb5b42ceec1 - rustc::session::opt_span_bug_fmt::{{closure}}::hac6e8f2df662620f
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/session/mod.rs:770
8: 0x7fb5b420762e - rustc::session::opt_span_bug_fmt::he7e61f6adc55e29d
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1057
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/session/mod.rs:766
9: 0x7fb5b4207292 - rustc::session::bug_fmt::h995c6792d8929834
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/session/mod.rs:750
10: 0x7fb5b67b23c7 - rustc_typeck::check::dropck::revise_self_ty::{{closure}}::h6e990da16bfc798b
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/dropck.rs:644
11: 0x7fb5b66c483a - rustc::ty::subst::<impl rustc::ty::Slice<rustc::ty::subst::Kind<'tcx>>>::fill_item::h8c0c6b3650a643fa
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/subst.rs:215
12: 0x7fb5b66f98df - rustc_typeck::check::dropck::iterate_over_potentially_unsafe_regions_in_type::hf27b94c5cbeb9fef
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/subst.rs:182
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/dropck.rs:615
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/dropck.rs:558
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/dropck.rs:415
13: 0x7fb5b66f8e33 - rustc_typeck::check::dropck::check_safety_of_destructor_if_necessary::h16dcd6dd761b7c2c
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/dropck.rs:287
14: 0x7fb5b670c00c - rustc_typeck::check::regionck::RegionCtxt::check_safety_of_rvalue_destructor_if_necessary::hf4c077992bb4034d
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/regionck.rs:1002
15: 0x7fb5b670aaff - <rustc_typeck::check::regionck::RegionCtxt<'a, 'gcx, 'tcx> as rustc::hir::intravisit::Visitor<'v>>::visit_expr::hbc45bb71eeb408fd
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/regionck.rs:596
16: 0x7fb5b67093df - rustc_typeck::check::regionck::RegionCtxt::visit_fn_body::h694b854703d3b296
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/:2
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/hir/intravisit.rs:113
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/regionck.rs:308
17: 0x7fb5b6708a72 - rustc_typeck::check::regionck::<impl rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx>>::regionck_fn::h4c3bf45fc5b0b67f
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/regionck.rs:151
18: 0x7fb5b674be2e - rustc_typeck::check::check_bare_fn::hcf6cfb2ab5a6420e
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:566
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:410
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/infer/mod.rs:523
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1028
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/local.rs:245
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1025
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:862
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/infer/mod.rs:523
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:410
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:548
19: 0x7fb5b674ec57 - rustc_typeck::check::check_item_body::he3880201f44aba3c
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:834
20: 0x7fb5b6749c15 - rustc_typeck::check::check_item_bodies::h60f6e46e6083a923
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:469
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/dep_graph/visit.rs:46
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/hir/mod.rs:445
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/dep_graph/visit.rs:57
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/mod.rs:2844
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:490
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/session/mod.rs:222
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/check/mod.rs:488
21: 0x7fb5b67aef5f - rustc_typeck::check_crate::h49660caa41b9699c
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/lib.rs:366
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/util/common.rs:38
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_typeck/lib.rs:366
22: 0x7fb5b71f7d9e - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::h5a9a7c8e1b6dbe3a
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/driver.rs:891
23: 0x7fb5b71d5d10 - rustc_driver::driver::phase_3_run_analysis_passes::h823704ee01fd0a1e
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1028
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/local.rs:245
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1025
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1012
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/local.rs:245
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:1009
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc/ty/context.rs:797
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/driver.rs:869
24: 0x7fb5b71be974 - rustc_driver::driver::compile_input::h66a0adaf05fab85d
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/driver.rs:173
25: 0x7fb5b71e8d30 - rustc_driver::run_compiler::hafe7bbfedf95a825
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/lib.rs:222
26: 0x7fb5b711db48 - std::panicking::try::do_call::h5ff5e568cb9cce51
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/lib.rs:1138
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/lib.rs:138
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/librustc_driver/lib.rs:1072
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:295
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:356
27: 0x7fb5b6e4c85a - __rust_maybe_catch_panic
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libpanic_unwind/lib.rs:97
28: 0x7fb5b713d7a8 - <F as alloc::boxed::FnBox>::call_box::h92e2f4ed0df1d5b6
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:332
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:351
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/mod.rs:287
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:595
29: 0x7fb5b6e40474 - std::sys::imp::thread::Thread::new::thread_start::ha102a6120fc52763
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:605
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys_common/thread.rs:21
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys/unix/thread.rs:84
30: 0x7fb5afda9183 - start_thread
31: 0x7fb5b6af337c - clone
32: 0x0 -

Metadata

Metadata

Assignees

No one assigned

    Labels

    I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions