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 VtableImpl ... did not contain projection for Obligation #20522

Closed
tobgu opened this issue Jan 4, 2015 · 3 comments
Closed

ICE VtableImpl ... did not contain projection for Obligation #20522

tobgu opened this issue Jan 4, 2015 · 3 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@tobgu
Copy link

tobgu commented Jan 4, 2015

My code is probably wrong in some way because I'm a real n00b to Rust but since the compiler output tells me to submit a bug report I will obey. Possible duplicate of #20347 but I know too little to be sure.

Compiler version info

rustc 0.13.0-nightly (c6c786671 2015-01-04 00:50:59 +0000)
binary: rustc
commit-hash: c6c786671d692d7b13c2e5c68a53001327b4b125
commit-date: 2015-01-04 00:50:59 +0000
host: x86_64-unknown-linux-gnu
release: 0.13.0-nightly
Initial: 0

Compiler output

p2.rs:12:1: 19:2 error: internal compiler error: impl `VtableImpl(impl_def_id=DefId { krate: 0, node: 21 }:Fibonacci.Iterator, substs=Substs[types=[[];[];[]], regions=[[];[];[]]], nested=[[];[];[]])` did not contain projection for `Obligation(predicate=<Fibonacci as TraitRef(Fibonacci, core::iter::Iterator)>::Item,depth=0)`
p2.rs:12 impl Iterator for Fibonacci {
p2.rs:13     fn next(&mut self) -> uint {
p2.rs:14         let curr = self.curr;
p2.rs:15         self.curr = self.next;
p2.rs:16         self.next = curr + self.next;
p2.rs:17         curr
         ...
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:123

stack backtrace:
   1:     0x7fe8477b32d0 - sys::backtrace::write::h8532e701ef86014f4it
   2:     0x7fe8477d8b00 - failure::on_fail::h7532e1f79d134d5dzvz
   3:     0x7fe84773e1c0 - rt::unwind::begin_unwind_inner::h97b151606151d62deaz
   4:     0x7fe8425efc60 - rt::unwind::begin_unwind::h15809447133099964284
   5:     0x7fe8425efbf0 - diagnostic::SpanHandler::span_bug::he8142ababcc30c39DFF
   6:     0x7fe845aeee70 - middle::traits::project::project_type::h947eece142ef049d52P
   7:     0x7fe845aebfd0 - middle::traits::project::opt_normalize_projection_type::hb3defb9cc9365d1e8UP
   8:     0x7fe845ad9ba0 - middle::traits::project::normalize_projection_type::hdc293893275ee559JTP
   9:     0x7fe845aed470 - middle::traits::project::AssociatedTypeNormalizer<'a, 'b, 'tcx>.TypeFolder<'tcx>::fold_ty::h801cbd2cdff2eff1kSP
  10:     0x7fe846daa2e0 - middle::ty_fold::Rc<T>.TypeFoldable<'tcx>::fold_with::h6325524173844043840
  11:     0x7fe846daae90 - middle::ty_fold::VecPerParamSpace<T>.TypeFoldable<'tcx>::fold_with::h13884369302522804796
  12:     0x7fe846dc6280 - check::FnCtxt<'a, 'tcx>::instantiate_bounds::hed550a9659b70335Oll
  13:     0x7fe846ddefc0 - check::wf::CheckTypeWellFormedVisitor<'ccx, 'tcx>::check_impl::closure.29997
  14:     0x7fe846ddb430 - check::wf::CheckTypeWellFormedVisitor<'ccx, 'tcx>::with_fcx::hb1283961ed8977b7Gfi
  15:     0x7fe846de1d70 - check::wf::CheckTypeWellFormedVisitor<'ccx, 'tcx>.Visitor<'v>::visit_item::h001ababd87597e37soi
  16:     0x7fe846fcefe0 - check_crate::unboxed_closure.40162
  17:     0x7fe846fc9c30 - check_crate::h19fb6dea5733566ajsx
  18:     0x7fe847d04640 - driver::phase_3_run_analysis_passes::h46b1604d9f9f5633Tva
  19:     0x7fe847cf2ae0 - driver::compile_input::h68b8602933aad8d7wba
  20:     0x7fe847dbdeb0 - thunk::F.Invoke<A, R>::invoke::h18029802347644288836
  21:     0x7fe847dbcc60 - rt::unwind::try::try_fn::h6518866316425934196
  22:     0x7fe84783f400 - rust_try_inner
  23:     0x7fe84783f3f0 - rust_try
  24:     0x7fe847dbcfb0 - thunk::F.Invoke<A, R>::invoke::h15513809553472565307
  25:     0x7fe8477c4e40 - sys::thread::thread_start::h5ea7ba97235331d5a9v
  26:     0x7fe841e130c0 - start_thread
  27:     0x7fe8473e4ec9 - __clone
  28:                0x0 - <unknown>

uname --all

Linux <host>-Ubuntu 3.13.0-39-generic #66-Ubuntu SMP Tue Oct 28 13:30:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Source code

use std::iter::AdditiveIterator;

struct Fibonacci {
    curr: uint,
    next: uint,
}

fn fib() -> Fibonacci {
    Fibonacci {curr: 1, next: 2}
}

impl Iterator for Fibonacci {
    fn next(&mut self) -> uint {
        let curr = self.curr;
        self.curr = self.next;
        self.next = curr + self.next;
        curr
    }
}

fn initial() -> uint {
    fib().take(5).sum();
}

fn main() {
    println!("Initial: {}", initial());
}
@shepmaster
Copy link
Member

@tobgu to get unstuck, you will want to change your code slightly:

impl Iterator<uint> for Fibonacci {
    fn next(&mut self) -> Option<uint> {

But there shouldn't be an ICE either way :-)

@tobgu
Copy link
Author

tobgu commented Jan 4, 2015

Thanks, that was actually my initial try but it gave me the following compilation error:
p2.rs:17:6: 17:20 error: wrong number of type arguments: expected 0, found 1
p2.rs:17 impl Iterator for Fibonacci {

What helped me in the end was adding the uint as an associated type like so:
impl Iterator for Fibonacci {
type Item = uint;

This way things compile and works as intended. It feels slightly awkward though...

@kmcallister kmcallister added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Jan 4, 2015
@huonw
Copy link
Member

huonw commented Jan 5, 2015

Closing as a dupe of #20347, thanks for filing!

@huonw huonw closed this as completed Jan 5, 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

4 participants