Skip to content

ICE: When implementing trait with a generic parameter and an associated output type #19129

@japaric

Description

@japaric
Member

STR

#![feature(associated_types)]

// This was an ICE (#17388), which got fixed by #18868
trait Trait<T> {
    type Output;

    fn fun() -> <Self as Trait<T>>::Output;
}

// The new ICE gets triggered by this `impl`
impl<T> Trait<T> for () {
    type Output = ();

    fn fun() {}
}

fn main() {}

Output

ice.rs:1:1: 1:1 error: internal compiler error: Type parameter `Output/AssocSpace.1` (Output/AssocSpace/1) out of range when substituting (root type=Output) substs=Substs[types=[[T];[()];[()];[]], regions=[[];[];[];[]]]
ice.rs:1 #![feature(associated_types)]
         ^
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
task 'rustc' panicked at 'Box<Any>', /var/tmp/paludis/build/dev-lang-rust-scm/work/rust-scm/src/libsyntax/diagnostic.rs:121

stack backtrace:
   1:     0x7f72dcabfae0 - rt::backtrace::imp::write::hdd602ae028f48d0dvVs
   2:     0x7f72dcac2b70 - <unknown>
   3:     0x7f72dd263310 - unwind::begin_unwind_inner::hbce8e4e8263dca1ePad
   4:     0x7f72da970ac0 - <unknown>
   5:     0x7f72da970a40 - diagnostic::SpanHandler::span_bug::hbe9748378cce230fGYF
   6:     0x7f72dba52970 - middle::subst::SubstFolder<'a, 'tcx>.TypeFolder<'tcx>::fold_ty::h3e05f8a78cf2b146RLP
   7:     0x7f72dbaf3800 - <unknown>
   8:     0x7f72dbaf33b0 - <unknown>
   9:     0x7f72dbaf2af0 - <unknown>
  10:     0x7f72dbb2c5b0 - <unknown>
  11:     0x7f72dbb2c410 - <unknown>
  12:     0x7f72dbb2bf50 - <unknown>
  13:     0x7f72dbb19410 - middle::ty::Generics<'tcx>::to_bounds::h3795ba6b160f5212yd1
  14:     0x7f72dbbe66b0 - middle::typeck::check::wf::BoundsChecker<'cx, 'tcx>::check_trait_ref::ha7aa8a645e91eafdZ9g
  15:     0x7f72dbbe48c0 - <unknown>
  16:     0x7f72dbbe1ae0 - <unknown>
  17:     0x7f72dbbe6c70 - middle::typeck::check::wf::CheckTypeWellFormedVisitor<'ccx, 'tcx>.Visitor<'v>::visit_item::ha3e9d13b541ef7c6k8g
  18:     0x7f72dbc3bb50 - middle::typeck::check::check_item_types::h754a0f7a04b7367639h
  19:     0x7f72dbfdf590 - <unknown>
  20:     0x7f72dbfde7a0 - middle::typeck::check_crate::h03aa0a74283c33108PL
  21:     0x7f72dd75bcc0 - driver::driver::phase_3_run_analysis_passes::h13d5815dc0529392D5R
  22:     0x7f72dd750ae0 - driver::driver::compile_input::hce9f8a5af8c23ae8nMR
  23:     0x7f72dd7d51d0 - <unknown>
  24:     0x7f72dd7d50c0 - <unknown>
  25:     0x7f72dd5e2d50 - <unknown>
  26:     0x7f72dd5e2b40 - <unknown>
  27:     0x7f72ddaf4ba0 - <unknown>
  28:     0x7f72dd2b2670 - <unknown>
  29:     0x7f72dd2b2660 - rust_try
  30:     0x7f72dd260c70 - unwind::try::hc967dd74749deb3arZc
  31:     0x7f72dd260b00 - task::Task::run::h236da885853fa0e4h5b
  32:     0x7f72ddaf48e0 - <unknown>
  33:     0x7f72dd262320 - <unknown>
  34:     0x7f72d7d451d0 - start_thread
  35:     0x7f72dcf391b9 - clone
  36:                0x0 - <unknown>

Version

#19113 + #18868 on top of bfaa7bc

cc @nikomatsakis

Activity

tomjakubowski

tomjakubowski commented on Nov 20, 2014

@tomjakubowski
Contributor

On version b825b34 I get this ICE just with (edited with a smaller example):

#![feature(associated_types)]
#![crate_type="lib"]

pub trait Foo<A> {
    type B;

    fn foo(&self) -> bool { false }
}
foo.rs:1:1: 1:1 error: internal compiler error: Type parameter `B/AssocSpace.1` (B/AssocSpace/1) out of range when substituting (root type=B) substs=Substs[types=[[A];[Self];[B];[]], regions=[[];[];[];[]]]
foo.rs:1 #![feature(associated_types)]
         ^
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
task 'rustc' panicked at 'Box<Any>', /home/tom/src/rust/rust/src/libsyntax/diagnostic.rs:121

stack backtrace:
   1:     0x7f42b15e5750 - rt::backtrace::imp::write::hd4dc9c5b7adc70deB9s
   2:     0x7f42b15e88f0 - failure::on_fail::h601ae62da37820fduwt
   3:     0x7f42b1d8b5b0 - unwind::begin_unwind_inner::hd5e2a13fc766a9ednbd
   4:     0x7f42af488b30 - unwind::begin_unwind::h1840779095798302194
   5:     0x7f42af488ab0 - diagnostic::SpanHandler::span_bug::haca8008c8efcaccdl7F
   6:     0x7f42b05766a0 - middle::subst::SubstFolder<'a, 'tcx>.TypeFolder<'tcx>::fold_ty::h6dfb50fd9b2a318dKTP
   7:     0x7f42b0617f80 - middle::ty_fold::VecPerParamSpace<T>.TypeFoldable<'tcx>::fold_with::closure.96163
   8:     0x7f42b0617b30 - middle::subst::VecPerParamSpace<T>::map_enumerated::h1858619917310266163
   9:     0x7f42b0617270 - middle::ty_fold::TypeFolder::fold_substs::h10218276810570421665
  10:     0x7f42b0650d50 - middle::ty_fold::Vec<T>.TypeFoldable<'tcx>::fold_with::closure.98606
  11:     0x7f42b0650bb0 - vec::Vec<T>.FromIterator<T>::from_iter::h15054265504360828229
  12:     0x7f42b06506f0 - middle::ty_fold::ty..ParamBounds<'tcx>.TypeFoldable<'tcx>::fold_with::h5912314470836935956
  13:     0x7f42b063db90 - middle::ty::Generics<'tcx>::to_bounds::hbca748b7f43f8696vo1
  14:     0x7f42b0652470 - middle::ty::construct_parameter_environment::he8cb628e2da26785Gy6
  15:     0x7f42b0651dd0 - middle::ty::ParameterEnvironment<'tcx>::for_item::haae90d8e2fdf61c2ju1
  16:     0x7f42b071ef30 - middle::typeck::check::check_method_body::he4cebab5fe2fb8f8nwi
  17:     0x7f42b07134a0 - middle::typeck::check::check_item::h2db4e12f763145a7vli
  18:     0x7f42b0717350 - middle::typeck::check::check_item_types::h6c8b3f561b623f38x0h
  19:     0x7f42b0b03fa0 - util::common::time::h16216271059762254987
  20:     0x7f42b0b031b0 - middle::typeck::check_crate::hd1db30e85ca4d877jVL
  21:     0x7f42b2298aa0 - driver::driver::phase_3_run_analysis_passes::h27f0c337e17ae602bfS
  22:     0x7f42b228d8c0 - driver::driver::compile_input::h144d59d4a02adda6VVR
  23:     0x7f42b2312840 - driver::run_compiler::h0f9dd69b80cf00c4pUT
  24:     0x7f42b2312730 - driver::run::closure.59734
  25:     0x7f42b211ef60 - task::TaskBuilder<S>::try_future::closure.39040
  26:     0x7f42b211ed50 - task::TaskBuilder<S>::spawn_internal::closure.39011
  27:     0x7f42b2632a40 - task::NativeSpawner.Spawner::spawn::closure.2471
  28:     0x7f42b1dedc60 - rust_try_inner
  29:     0x7f42b1dedc50 - rust_try
  30:     0x7f42b1d88f10 - unwind::try::hbf9691835cc163a4IZc
  31:     0x7f42b1d88da0 - task::Task::run::h309f69a6701379ady5b
  32:     0x7f42b2632780 - task::NativeSpawner.Spawner::spawn::closure.2397
  33:     0x7f42b1d8a5c0 - thread::thread_start::h721d15c10ff33d0aEqc
  34:     0x7f42ac7f9250 - start_thread
  35:     0x7f42b1a613b9 - clone
  36:                0x0 - <unknown>

added
A-associated-itemsArea: Associated items (types, constants & functions)
I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
on Nov 25, 2014
added a commit that references this issue on Dec 15, 2014

10 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-associated-itemsArea: Associated items (types, constants & functions)I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @tomjakubowski@huonw@japaric

      Issue actions

        ICE: When implementing trait with a generic parameter and an associated output type · Issue #19129 · rust-lang/rust