Skip to content

Seemingly infinite loop in translation item collection #34416

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
alexcrichton opened this issue Jun 22, 2016 · 2 comments
Closed

Seemingly infinite loop in translation item collection #34416

alexcrichton opened this issue Jun 22, 2016 · 2 comments

Comments

@alexcrichton
Copy link
Member

When compiling this file with cargo build --test eventual in that repository (at that revision), the compiler seemingly hangs. The stack trace after awhile is:

#0  0x00007f6d96fb5d59 in _$LT$rustc..ty..sty..TypeVariants$LT$$u27$tcx$GT$$u20$as$u20$core..cmp..PartialEq$GT$::eq::hdc97fea3d2a9ec36 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#1  0x00007f6d96fb4fbb in _$LT$std..collections..hash..set..HashSet$LT$T$C$$u20$S$GT$$GT$::get::h2e6fecee3d8a00a0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#2  0x00007f6d96fb3b1c in rustc::ty::context::CtxtInterners::intern_ty::he404503a59fde7c2 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#3  0x00007f6d96dbf104 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#4  0x00007f6d96dbfd30 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#5  0x00007f6d96dbf210 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#6  0x00007f6d96dc010a in _$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..iter..traits..FromIterator$LT$T$GT$$GT$::from_iter::h4ef495e38b3b392f () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#7  0x00007f6d96dc0067 in rustc::ty::fold::TypeFoldable::fold_with::hca4e6c5f1855cc24 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#8  0x00007f6d96dbf447 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#9  0x00007f6d96dbfd30 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#10 0x00007f6d96dbf210 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#11 0x00007f6d96dbfc76 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#12 0x00007f6d96dbf210 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#13 0x00007f6d96dbfc76 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#14 0x00007f6d96dbf432 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#15 0x00007f6d96dbfd30 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#16 0x00007f6d96dbf210 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#17 0x00007f6d96dbfc76 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#18 0x00007f6d96dbf210 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#19 0x00007f6d96dbfc76 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#20 0x00007f6d96dbf432 in rustc::ty::fold::TypeFolder::fold_ty::hd091a959fe9e93da () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#21 0x00007f6d96dbfd30 in rustc::ty::fold::TypeFolder::fold_substs::h5354c2cb141ecad0 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#22 0x00007f6d96f2fc81 in rustc::ty::fold::TypeFoldable::fold_with::h2226d0564c2753aa () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#23 0x00007f6d96f2f77a in rustc::ty::fold::TypeFoldable::fold_with::h5a066b9faadb555a () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#24 0x00007f6d96f575c9 in rustc::infer::higher_ranked::_$LT$impl$u20$rustc..infer..InferCtxt$LT$$u27$a$C$$u20$$u27$gcx$C$$u20$$u27$tcx$GT$$GT$::plug_leaks::h31ea4f9ecee7e01a () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#25 0x00007f6d96f5896d in rustc::traits::select::SelectionContext::impl_or_trait_obligations::h5cb331c959adfea1 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#26 0x00007f6d96f58f1c in rustc::traits::select::SelectionContext::confirm_impl_candidate::_$u7b$$u7b$closure$u7d$$u7d$::h123590ceb6b13c52 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#27 0x00007f6d96f58b53 in rustc::infer::InferCtxt::in_snapshot::h5b64a26f07e0118e () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#28 0x00007f6d96f44254 in rustc::traits::select::SelectionContext::confirm_candidate::h1588d067a35baf64 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#29 0x00007f6d96f2b48b in rustc::traits::select::SelectionContext::select::h748107d7ba3e7cab () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#30 0x00007f6d96f31bd5 in rustc::traits::project::opt_normalize_projection_type::hdcd0601b73e88ce7 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#31 0x00007f6d96f1a161 in rustc::traits::project::normalize_projection_type::h42ddc46289d47331 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#32 0x00007f6d96d90248 in _$LT$rustc..traits..project..AssociatedTypeNormalizer$LT$$u27$a$C$$u20$$u27$b$C$$u20$$u27$gcx$C$$u20$$u27$tcx$GT$$u20$as$u20$rustc..ty..fold..TypeFolder$LT$$u27$gcx$C$$u20$$u27$tcx$GT$$GT$::fold_ty::hb538441763e332d4 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#33 0x00007f6d96d94493 in rustc::ty::fold::TypeFolder::fold_substs::hcb429e71c727d725 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#34 0x00007f6d96d8fb5b in _$LT$rustc..traits..project..AssociatedTypeNormalizer$LT$$u27$a$C$$u20$$u27$b$C$$u20$$u27$gcx$C$$u20$$u27$tcx$GT$$u20$as$u20$rustc..ty..fold..TypeFolder$LT$$u27$gcx$C$$u20$$u27$tcx$GT$$GT$::fold_ty::hb538441763e332d4 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#35 0x00007f6d96d94493 in rustc::ty::fold::TypeFolder::fold_substs::hcb429e71c727d725 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#36 0x00007f6d96d8fb5b in _$LT$rustc..traits..project..AssociatedTypeNormalizer$LT$$u27$a$C$$u20$$u27$b$C$$u20$$u27$gcx$C$$u20$$u27$tcx$GT$$u20$as$u20$rustc..ty..fold..TypeFolder$LT$$u27$gcx$C$$u20$$u27$tcx$GT$$GT$::fold_ty::hb538441763e332d4 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#37 0x00007f6d96d8ef54 in rustc::traits::project::normalize_with_depth::h1d7e5f812d0949c5 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#38 0x00007f6d96d8e56b in _$LT$$RF$$u27$gcx$u20$rustc..ty..TyS$LT$$u27$gcx$GT$$u20$as$u20$rustc..infer..TransNormalize$LT$$u27$gcx$GT$$GT$::trans_normalize::hc0ed6aa5590a9a37 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc-8102e29f.so
#39 0x00007f6d97e3db13 in rustc::infer::_$LT$impl$u20$rustc..ty..context..TyCtxt$LT$$u27$a$C$$u20$$u27$tcx$C$$u20$$u27$tcx$GT$$GT$::normalize_associated_type::ha192860e5464ab44 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#40 0x00007f6d97ea01cc in _$LT$rustc_trans..collector..MirNeighborCollector$LT$$u27$a$C$$u20$$u27$tcx$GT$$u20$as$u20$rustc..mir..visit..Visitor$LT$$u27$tcx$GT$$GT$::visit_lvalue::h3adecd3a6db5869e () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#41 0x00007f6d97ea1984 in _$LT$rustc_trans..collector..MirNeighborCollector$LT$$u27$a$C$$u20$$u27$tcx$GT$$u20$as$u20$rustc..mir..visit..Visitor$LT$$u27$tcx$GT$$GT$::visit_terminator_kind::hd7becdaf225d43f1 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#42 0x00007f6d97ea00cf in rustc::mir::visit::Visitor::visit_mir::hed913172065cc16c () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#43 0x00007f6d97e99a0b in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#44 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#45 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#46 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#47 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#48 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#49 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#50 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#51 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#52 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#53 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#54 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#55 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#56 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#57 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#58 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#59 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#60 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#61 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#62 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#63 0x00007f6d97e9a747 in rustc_trans::collector::collect_items_rec::hbad9b62cfe28ce98 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#64 0x00007f6d97e5fb34 in rustc_trans::base::collect_and_partition_translation_items::_$u7b$$u7b$closure$u7d$$u7d$::ha31f4a78f586b30e () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#65 0x00007f6d97e4cc4a in rustc_trans::base::trans_crate::h999c47a06d45abea () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_trans-8102e29f.so
#66 0x00007f6d9ac39e50 in rustc_driver::driver::phase_4_translate_to_llvm::had910d0e745bc40f () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#67 0x00007f6d9ac36e8e in rustc_driver::driver::compile_input::_$u7b$$u7b$closure$u7d$$u7d$::hf187cb470aad2bf2 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#68 0x00007f6d9ac335ee in rustc_driver::driver::phase_3_run_analysis_passes::_$u7b$$u7b$closure$u7d$$u7d$::hd565ad56c5876a16 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#69 0x00007f6d9ac2cdba in rustc::ty::context::TyCtxt::create_and_enter::habef58c7230d34f9 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#70 0x00007f6d9abf7f60 in rustc_driver::driver::compile_input::hfd60b020f6d0208d () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#71 0x00007f6d9abe3e85 in rustc_driver::run_compiler::h884d01d12eb76bbb () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#72 0x00007f6d9abe0f5f in std::panicking::try::call::hd72cf79141f67e60 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#73 0x00007f6d9a717c4c in __rust_try () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/libstd-8102e29f.so
#74 0x00007f6d9a717bef in __rust_maybe_catch_panic () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/libstd-8102e29f.so
#75 0x00007f6d9abe1a45 in _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::h589d2091babf223a () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustc_driver-8102e29f.so
#76 0x00007f6d9a7078b5 in std::sys::thread::Thread::new::thread_start::h9c883b6d445ece46 () from /home/alex/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/libstd-8102e29f.so
#77 0x00007f6d9225b182 in start_thread (arg=0x7f6d907ff700) at pthread_create.c:312
#78 0x00007f6d9a34547d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

And the logs towards the end look like this: https://gist.github.com/alexcrichton/08e46aaef1c170e74752ce1d75287a02

cc @michaelwoerister, looks to be hanging during translation item collections

@alexcrichton
Copy link
Member Author

Ok, managed to reduce it to this:

pub trait Future: 'static {
    type Item;
    type Error;

    fn boxed(self) -> Box<Future<Item=Self::Item, Error=Self::Error>>
        where Self: Sized
    {
        Box::new(self)
    }

    fn map(self) -> Map<Self>
        where Self: Sized,
    {
        loop {}
    }

    fn forget(self) where Self: Sized {
        self.map().boxed();
    }
}

// =============================================================================

pub struct Map<A> {
    _future: A,
}

impl<A> Future for Map<A>
    where A: Future,
{
    type Item = ();
    type Error = A::Error;
}

// =============================================================================

pub struct Promise;

impl Future for Promise {
    type Item = ();
    type Error = ();
}

// =============================================================================

fn foo() -> Promise {
    loop {}
}

fn main() {
    foo().boxed();
}

If rustc is run over that, it takes awhile but eventually spits out

error: overflow evaluating the requirement `<Promise as Future>::Error` [--explain E0275]
note: consider adding a `#![recursion_limit="128"]` attribute to your crate

error: aborting due to previous error

This is in theory just a reduced down version of the original crate, so presumably it was just going to take a very long time to say that before?

Haven't quite figured out how this program is causing the recursion limit to get hit...

@alexcrichton
Copy link
Member Author

alexcrichton commented Jun 22, 2016

@eddyb managed to reduce further:

pub trait Future: 'static {
    fn forget(self) where Self: Sized {
        Box::new(Map(self)) as Box<Future>;
    }
}

pub struct Map<A>(A);
impl<A: Future> Future for Map<A> {}

pub struct Promise;
impl Future for Promise {}

fn main() {
    Promise.forget();
}

bors added a commit that referenced this issue Jun 27, 2016
Don't translate vtable methods with Self: Sized bounds.

Fixes #34416.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant