Skip to content
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

ICE: unexpected failure #13853

Closed
carllerche opened this issue Apr 29, 2014 · 10 comments
Closed

ICE: unexpected failure #13853

carllerche opened this issue Apr 29, 2014 · 10 comments
Labels
E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@carllerche
Copy link
Member

trait Node {
    fn zomg();
}

trait Graph<N: Node> {
    fn nodes<'a, I: Iterator<&'a N>>(&'a self) -> I;
}

impl<N: Node> Graph<N> for Vec<N> {
    fn nodes<'a, I: Iterator<&'a N>>(&self) -> I {
        self.iter()
    }
}

struct Stuff;

impl Node for Stuff {
    fn zomg() {
        println!("zomg");
    }
}

fn iterate<N: Node, G: Graph<N>>(graph: &G) {
    for node in graph.iter() {
        node.zomg();
    }
}

pub fn main() {
    let graph = Vec::new();

    graph.push(Stuff);

    iterate(graph);
}

backtrace:

RUST_BACKTRACE=1 rustc graph.rs
graph.rs:11:9: 11:20 error: mismatched types: expected `I` but found `std::slice::Items<,N>` (expected type parameter but found struct std::slice::Items)
graph.rs:11         self.iter()
                    ^~~~~~~~~~~
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://static.rust-lang.org/doc/master/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'OwnedSlice: index out of bounds', /Users/carllerche/Code/oss/rust/src/libstd/option.rs:245
stack backtrace:
   1:        0x1124fcbe4 - rt::backtrace::imp::write::hcadb4ca6cf458711WEa::v0.11.pre
   2:        0x11245eafe - rt::unwind::begin_unwind_inner::hca8608d5eeddd58a2ea::v0.11.pre
   3:        0x10f857888 - rt::unwind::begin_unwind::h17449128597888216233::v0.11.pre
   4:        0x10fa04c9c - middle::subst::ty..Region.Subst::subst_spanned::he4ed0aac71e34c93RLQ::v0.11.pre
   5:        0x10fa04f94 - middle::ty_fold::super_fold_sty::h16046759532750779955::v0.11.pre
   6:        0x10fa044c3 - middle::subst::SubstFolder<'a>.TypeFolder::fold_ty::h0538984c9a39e119FwQ::v0.11.pre
   7:        0x10f9d4460 - iter::Iterator::collect::h16000720370100676544::v0.11.pre
   8:        0x10fa05820 - middle::ty_fold::super_fold_sig::h9594554811819343845::v0.11.pre
   9:        0x10fa05029 - middle::ty_fold::super_fold_sty::h16046759532750779955::v0.11.pre
  10:        0x10fa044c3 - middle::subst::SubstFolder<'a>.TypeFolder::fold_ty::h0538984c9a39e119FwQ::v0.11.pre
  11:        0x10f9d4795 - middle::subst::ty..t.Subst::subst_spanned::h2928f17972b9f34fRuQ::v0.11.pre
  12:        0x10fafd280 - middle::typeck::check::compare_impl_method::h7ba2a958f71be34dSK7::v0.11.pre
  13:        0x10fae6595 - middle::typeck::check::check_item::h67823ebe09a4e536lp7::v0.11.pre
  14:        0x10faedb8d - middle::typeck::check::check_item_types::hd2c43c2abe8a4484gS6::v0.11.pre
  15:        0x10fc1d97f - util::common::time::h16635378632434799699::v0.11.pre
  16:        0x10fc1c8ad - middle::typeck::check_crate::he941c106adef2e35Wgu::v0.11.pre
  17:        0x11003840d - driver::driver::phase_3_run_analysis_passes::h297d37f689608467g1e::v0.11.pre
  18:        0x11003e5c2 - driver::driver::compile_input::h6b68b4cbb99b30fb3qf::v0.11.pre
  19:        0x110064312 - run_compiler::h6001e0654ecea84bzUm::v0.11.pre
  20:        0x11007818d - main_args::closure.91224
  21:        0x110076522 - monitor::closure.91099
  22:        0x11007206b - task::TaskBuilder::try::closure.90865
  23:        0x10f8216ec - task::spawn_opts::closure.7106
  24:        0x1124f7ce8 - rt::task::Task::run::closure.40146
  25:        0x112501a5c - rust_try
  26:        0x1124f7b67 - rt::task::Task::run::h7f884ecfbc0c0d44C57::v0.11.pre
  27:        0x10f82156f - task::spawn_opts::closure.7078
  28:        0x1124fb5b6 - rt::thread::thread_start::h46e5de4fe5c37df8PK8::v0.11.pre
  29:     0x7fff8e14e772 - _pthread_start
@carllerche
Copy link
Member Author

Here is a smaller bit of code that causes a compiler error. I am not 100% sure it is the same case though.

trait Graph<N> {
    fn nodes<'a, I: Iterator<&'a N>>(&'a self) -> I;
}

impl<N> Graph<N> for Vec<N> {
    fn nodes<'a, I: Iterator<&'a N>>(&'a self) -> I {
        self.iter()
    }
}

pub fn main() {
}

@alexcrichton
Copy link
Member

Another testcase

#![crate_type = "lib"]

enum NodeContents<'a> {
    Children(Vec<Node<'a>>),
}

struct Node<'a> {
    contents: NodeContents<'a>,
}

impl<'a> Node<'a> {
    fn noName(contents: NodeContents<'a>) -> Node<'a> {
        Node{  contents: contents,}
    }
}

@alexcrichton
Copy link
Member

Another test case

trait FromStructReader<'a> { }
trait ResponseHook {
     fn get<'a, T: FromStructReader<'a>>(&'a self);
}
fn foo(res : Box<ResponseHook>) { res.get }
fn main() {}

@jdm
Copy link
Contributor

jdm commented May 25, 2014

Another testcase:

struct AutoBuilder<'a> {
    context: &'a int
}

impl<'a> Drop for AutoBuilder<'a> {
    fn drop(&mut self) {
    }
}

fn main() {
}

@irauta
Copy link

irauta commented May 31, 2014

I'm pretty much new at this on many levels (just created this account!), so you should take anything I say with a grain of salt. Anyway, I too hit this bug with essentially the same code as jdm - trying to implement Drop for a struct containing a borrowed pointer.

After some git bisecting looks like the commit 7d6f1aa is the first one where this error happens. That commit changed file src/librustc/middle/subst.rs and the stack traces mention middle::subst so maybe there's something to this?

When testing with the Drop version of the code, the older versions of rustc suggest adding a #["unsafe_destructor"]. It seems to make the error go away on newer versions too - just tested it on rustc 0.11.0-pre-nightly (faa7ba7 2014-05-31 01:06:40 -0700), x86_64-unknown-linux-gnu, and the code compiled without any complaints.

@Valloric
Copy link
Contributor

Valloric commented Jun 1, 2014

Motivated by @irauta's findings, I played around with my testcase and provoked what appears to be Yet Another ICE. It looks different, but it might be caused by the same underlying problem so I'm posting it here instead of creating a new issue.

Testcase (notice that only the Drop impl was added):

#![crate_type = "lib"]

enum NodeContents<'a> {
    Children(Vec<Node<'a>>),
}

impl<'a> Drop for NodeContents<'a> {
  fn drop( &mut self ) {
  }
}

struct Node<'a> {
    contents: NodeContents<'a>,
}

impl<'a> Node<'a> {
    fn noName(contents: NodeContents<'a>) -> Node<'a> {
        Node{  contents: contents,}
    }
}

Output:

$ RUST_BACKTRACE=1 rustc testcase.rs
error: internal compiler error: ID not mapped to struct fields: enum NodeContents::NodeContents (id=3)
note: the compiler hit an unexpected failure path. 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
task 'rustc' failed at 'Box<Any>', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/diagnostic.rs:162
stack backtrace:
   1:     0x7ffee7a64c10 - rt::backtrace::imp::write::h4eaa694fcd948704Wrx::v0.11.0.pre
   2:     0x7ffee79e7730 - rt::unwind::begin_unwind_inner::h3b5fcee9a7d12dbfX1w::v0.11.0.pre
   3:     0x7ffee63be2f0 - rt::unwind::begin_unwind::h6952148588903257095::v0.11.0.pre
   4:     0x7ffee63bed30 - diagnostic::Handler::bug::h4b77aa25d705a445P4b::v0.11.0.pre
   5:     0x7ffee850fc70 - driver::session::Session::bug::hfc07277a564612feWGn::v0.11.0.pre
   6:     0x7ffee86200c0 - middle::ty::lookup_struct_fields::hfb681bcf73bb30d2TpQ::v0.11.0.pre
   7:     0x7ffee8561670 - middle::ty::struct_fields::he157a00b7c3060eb1uQ::v0.11.0.pre
   8:     0x7ffee86b1880 - middle::ty::type_contents::tc_ty::hcf3453b2500819dfPCN::v0.11.0.pre
   9:     0x7ffee865b040 - middle::ty::type_contents::h59dcd90524a31605LBN::v0.11.0.pre
  10:     0x7ffee8a28ac0 - middle::kind::check_item::h098689564b21e13a08S::v0.11.0.pre
  11:     0x7ffee8a2b7b0 - middle::kind::check_crate::h9e02f0748a8c41d7dZS::v0.11.0.pre
  12:     0x7ffee8dbcc60 - driver::driver::phase_3_run_analysis_passes::hc9c5bc13cc92c0a5kJm::v0.11.0.pre
  13:     0x7ffee8db6120 - driver::driver::compile_input::he7dad0e3dbb6fee3Uym::v0.11.0.pre
  14:     0x7ffee8e82540 - driver::run_compiler::h96a720220bae0c8cDdp::v0.11.0.pre
  15:     0x7ffee8e82460 - driver::main_args::closure.94809
  16:     0x7ffee8e97600 - driver::monitor::closure.95880
  17:     0x7ffee8e929e0 - task::TaskBuilder::try::closure.95643
  18:     0x7ffee7f97690 - task::spawn_opts::closure.7832
  19:     0x7ffee7a5f0a0 - rt::task::Task::run::closure.25246
  20:     0x7ffee7ac8ea0 - rust_try
  21:     0x7ffee7a5eff0 - rt::task::Task::run::h11c4d2099f444a65AQu::v0.11.0.pre
  22:     0x7ffee7f97440 - task::spawn_opts::closure.7805
  23:     0x7ffee7a63040 - rt::thread::thread_start::h43799e40ebb51dd18zv::v0.11.0.pre
  24:     0x7ffee54f40c0 - start_thread
  25:     0x7ffee76a72d9 - __clone
  26:                0x0 - <unknown>

@Valloric
Copy link
Contributor

As of rustc 0.11.0-pre-nightly (0ee6a8e 2014-06-09 23:41:53 -0700), the testcase from #13853 (comment) doesn't repro anymore; it compiles fine. Every other testcase reported in this issue (including #13853 (comment)) still fails with an ICE.

@erickt
Copy link
Contributor

erickt commented Jun 23, 2014

Another test case that has the same backtrace.

trait Deserializer<'a> { }

trait Deserializable {
    fn deserialize_token<'a, D: Deserializer<'a>>(D, &'a str) -> Self;
}

impl<'a, T: Deserializable> Deserializable for &'a str {
    fn deserialize_token<D: Deserializer<'a>>(_x: D, _y: &'a str) -> &'a str {
    }
}

fn main() {
}

@jdm
Copy link
Contributor

jdm commented Jun 23, 2014

Given how frequently people keep hitting this, could fixing the problem be given a priority boost?

d3zd3z added a commit to d3zd3z/rdump that referenced this issue Jun 30, 2014
Due to a rustc bug:
  rust-lang/rust#13853
  rust-lang/rust#14889

this requires the 'unsafe_destructor' attribute on the Transaction
class.
@ghost ghost added E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. and removed E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. labels Oct 30, 2014
@dwrensha
Copy link
Contributor

I'm happy to report that I'm not getting internal compiler errors on any of these examples anymore. Perhaps @nikomatsakis's #18993 fixed the problem? Can we make sure that there are some regression tests?

dwrensha added a commit to capnproto/capnproto-rust that referenced this issue Nov 19, 2014
dwrensha added a commit to capnproto/capnpc-rust that referenced this issue Nov 19, 2014
@alexcrichton alexcrichton added the E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. label Nov 19, 2014
@bors bors closed this as completed in 9cd7864 Dec 30, 2014
xmas7 added a commit to xmas7/capnpc-rust that referenced this issue Sep 6, 2022
arcnmx pushed a commit to arcnmx/rust that referenced this issue Jan 9, 2023
Use diagnostic code as link to full message

fixes rust-lang#13823 by adding a vscode setting that will keeping the existing diagnostic code and use it as a link to the full compiler error message.
While I was there I also fixed `index` to fallback to `rendered.length` to make the previewRustcOutput feature work.
filippbudko added a commit to filippbudko/capnpc-rust that referenced this issue Jan 16, 2023
bors pushed a commit to rust-lang-ci/rust that referenced this issue Jan 28, 2025
…st-lang#13853)

fix rust-lang#13624

changelog: [`unnecessary_to_owned`]: don't suggest to use `cloned` on
`Cow` in `unnecessary_to_owned`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

7 participants