Skip to content

rustdoc:ICE with field that has a conditional Send impl. #60726

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
rodrimati1992 opened this issue May 11, 2019 · 3 comments · Fixed by #60773
Closed

rustdoc:ICE with field that has a conditional Send impl. #60726

rodrimati1992 opened this issue May 11, 2019 · 3 comments · Fixed by #60773
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Comments

@rodrimati1992
Copy link
Contributor

rodrimati1992 commented May 11, 2019

Edited:
Please look at this comment for a self-contained example that reproduces the ICE.


In the process of finishing the 0.3 release of abi_stable,I got this ICE:

 Documenting abi_stable v0.2.3 (/home/matias/Documents/eclipse_workspace/abi_stable_workspace/abi_stable)
thread 'rustc' panicked at 'Unable to fulfill trait DefId(2/0:850 ~ core[3726]::marker[0]::Send[0]) for 'std_types::map::iterator_stuff::IntoIter<K, V>': [FulfillmentError(Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [std_types::map::iterator_stuff::ValIterInterface<u32, u32>], item_def_id: DefId(0/0:4989 ~ abi_stable[8787]::erased_types[0]::traits[0]::InterfaceType[0]::Send[0]) }, core_extensions::type_level_bool::True)),depth=2),MismatchedProjectionTypes(Sorts(ExpectedFound { expected: core_extensions::type_level_bool::False, found: core_extensions::type_level_bool::True })))]', src/librustc/traits/auto_trait.rs:208:17
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

error: internal compiler error: unexpected panic

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: rustc 1.34.0 (91856ed52 2019-04-10) running on i686-unknown-linux-gnu

Trying it out again in nightly (rustc 1.36.0-nightly (d595b11 2019-05-10) running on i686-unknown-linux-gnu) ,I got:

 Documenting abi_stable v0.3.0 (/home/matias/Documents/eclipse_workspace/abi_stable_workspace/abi_stable)
thread 'rustc' panicked at 'Unable to fulfill trait DefId(2:1386 ~ core[4c06]::marker[0]::Send[0]) for 'std_types::map::iterator_stuff::IntoIter<K, V>': [FulfillmentError(Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [std_types::map::iterator_stuff::ValIterInterface<u32, u32>], item_def_id: DefId(0:7003 ~ abi_stable[8787]::erased_types[0]::traits[0]::InterfaceType[0]::Send[0]) }, core_extensions::type_level_bool::True)),depth=2),MismatchedProjectionTypes(Sorts(ExpectedFound { expected: core_extensions::type_level_bool::False, found: core_extensions::type_level_bool::True })))]', src/librustc/traits/auto_trait.rs:202:17
stack backtrace:
   0: 0xb5cded4c - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::h88d972f6f6e46c24
                       at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1: 0xb5cd70fb - std::sys_common::backtrace::_print::h83aca1574431bbad
                       at src/libstd/sys_common/backtrace.rs:71
   2: 0xb5cdb1aa - std::panicking::default_hook::{{closure}}::h54e8f04261c4c0b1
                       at src/libstd/sys_common/backtrace.rs:59
                       at src/libstd/panicking.rs:197
   3: 0xb5cdaef4 - std::panicking::default_hook::h66422ac1b55ce676
                       at src/libstd/panicking.rs:211
   4: 0xb5db9c38 - proc_macro::bridge::client::<impl proc_macro::bridge::Bridge>::enter::{{closure}}::{{closure}}::h581fccc42b4d0f71
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:718
                       at src/libproc_macro/bridge/client.rs:304
   5: 0xb5cdb9f6 - std::panicking::rust_panic_with_hook::hbf2738690e9f5989
                       at src/libstd/panicking.rs:478
   6: 0xb5cdb476 - std::panicking::continue_panic_fmt::hcbef7b43feb6b8d9
                       at src/libstd/panicking.rs:381
   7: 0xb5cdb3b9 - std::panicking::begin_panic_fmt::hfafa0a0090d76a4e
                       at src/libstd/panicking.rs:336
   8:   0x63531f - rustc::traits::auto_trait::AutoTraitFinder::find_auto_trait_generics::{{closure}}::{{closure}}::h3076052a80a2b2be
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::std::macros::panic macros>:8
   9:   0x634d23 - rustc::ty::context::tls::with_context::{{closure}}::h68c2c2610d54ace6
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/result.rs:766
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/traits/auto_trait.rs:201
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/infer/mod.rs:529
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1726
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1966
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1899
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1965
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1725
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2071
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2055
  10:   0x6338d2 - rustc::ty::context::GlobalCtxt::enter_local::h90af253d10758aa1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2045
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2055
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2067
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1717
  11:   0x6553f8 - rustc::traits::auto_trait::AutoTraitFinder::find_auto_trait_generics::h42ee2645b594cb59
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/infer/mod.rs:528
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/traits/auto_trait.rs:119
  12:   0x4c5725 - core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut::h25ad1904ab0b7bc3
                       at src/librustdoc/clean/auto_trait.rs:50
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/ops/function.rs:269
  13:   0x73a13a - <core::iter::adapters::chain::Chain<A,B> as core::iter::traits::iterator::Iterator>::try_fold::hb3e3d5b042f42891
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/chain.rs:88
  14:   0x54dcb1 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::ha8605cbc824c8642
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1809
  15:   0x718bdd - rustdoc::clean::get_auto_trait_and_blanket_impls::h6b2119eea5d33f2b
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/clean/auto_trait.rs:33
                       at src/librustdoc/clean/mod.rs:3787
  16:   0x7545b6 - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/passes/collect_trait_impls.rs:158
  17:   0x54a448 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hf3f69d672ddf9615
                       at src/librustdoc/fold.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1929
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1821
  18:   0x75109e - rustdoc::fold::DocFolder::fold_inner_recur::h3b90485174c31fb1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/fold.rs:100
                       at src/librustdoc/fold.rs:27
  19:   0x7548ad - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/fold.rs:90
                       at src/librustdoc/passes/collect_trait_impls.rs:166
  20:   0x54a448 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hf3f69d672ddf9615
                       at src/librustdoc/fold.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1929
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1821
  21:   0x75109e - rustdoc::fold::DocFolder::fold_inner_recur::h3b90485174c31fb1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/fold.rs:100
                       at src/librustdoc/fold.rs:27
  22:   0x7548ad - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/fold.rs:90
                       at src/librustdoc/passes/collect_trait_impls.rs:166
  23:   0x54a448 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hf3f69d672ddf9615
                       at src/librustdoc/fold.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1929
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1821
  24:   0x75109e - rustdoc::fold::DocFolder::fold_inner_recur::h3b90485174c31fb1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/fold.rs:100
                       at src/librustdoc/fold.rs:27
  25:   0x7548ad - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/fold.rs:90
                       at src/librustdoc/passes/collect_trait_impls.rs:166
  26:   0x751f8d - rustdoc::passes::collect_trait_impls::collect_trait_impls::h7ddbb0578e71ca0e
                       at src/librustdoc/fold.rs:105
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/option.rs:624
                       at src/librustdoc/fold.rs:105
                       at src/librustdoc/passes/collect_trait_impls.rs:17
  27:   0x653622 - rustc::ty::context::tls::enter_global::h0352a121287a69cf
                       at src/librustdoc/core.rs:465
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1999
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1966
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1899
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1965
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1998
  28:   0x6841d6 - rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}::h37af13ddc5734fca
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::rustc_data_structures::box_region::declare_box_region_type macros>:17
  29: 0xb7c04368 - rustc_interface::passes::create_global_ctxt::{{closure}}::ha0f95b1f2df7a5e5
  30:   0x68524a - rustc_interface::interface::run_compiler_in_existing_thread_pool::hb0e8f2e4ea5e07c3
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:910
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_data_structures/box_region.rs:52
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::rustc_data_structures::box_region::declare_box_region_type macros>:19
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at src/librustdoc/core.rs:354
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/interface.rs:122
  31:   0x7923f7 - rustdoc::core::run_core::h828402703fcc17cc
                       at src/librustdoc/core.rs:340
  32:   0x636b2e - <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h7b9fd07b2b1ea2c8
                       at src/librustdoc/lib.rs:450
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:309
  33:   0x57b815 - std::panicking::try::do_call::hb936f360df81fcbb
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:293
  34: 0xb5ceb447 - __rust_maybe_catch_panic
                       at src/libpanic_unwind/lib.rs:85
  35:   0x7582cc - rustc_driver::report_ices_to_stderr_if_any::h7f9579b20d11e238
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:272
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:388
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_driver/lib.rs:1114
  36:   0x509438 - rustdoc::main_args::ha7dd5c6ee7b5b640
                       at src/librustdoc/lib.rs:447
                       at src/librustdoc/lib.rs:404
  37:   0x733dda - std::thread::local::LocalKey<T>::with::ha9c7da692a148e8b
                       at src/librustdoc/lib.rs:98
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/option.rs:416
                       at src/librustdoc/lib.rs:98
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:186
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1954
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:299
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:245
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1946
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:299
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:245
  38:   0x688c42 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha4de48f9125e55bb
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1938
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:186
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:182
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libsyntax/lib.rs:101
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libsyntax/lib.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:181
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:159
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/sys_common/backtrace.rs:136
  39:   0x57b980 - std::panicking::try::do_call::hcb704b420ba15158
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/mod.rs:469
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:309
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:293
  40: 0xb5ceb447 - __rust_maybe_catch_panic
                       at src/libpanic_unwind/lib.rs:85
  41:   0x75ff8b - core::ops::function::FnOnce::call_once{{vtable.shim}}::h71980ce26ab01d54
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:272
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:388
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/mod.rs:468
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/ops/function.rs:231
  42: 0xb5cbe208 - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h2e642aeea9c9581f
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:704
  43: 0xb5ce9e50 - std::sys::unix::thread::Thread::new::thread_start::ha576c140cc0cd745
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:704
                       at src/libstd/sys_common/thread.rs:13
                       at src/libstd/sys/unix/thread.rs:79
  44: 0xb5c37294 - start_thread
  45: 0xb5b440ad - __clone
  46:        0x0 - <unknown>

error: internal compiler error: unexpected panic

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: rustc 1.36.0-nightly (d595b1135 2019-05-10) running on i686-unknown-linux-gnu

For the abi_stable::std_types::map::IntoIter type,with this type definition:

#[repr(transparent)]
pub struct IntoIter<K,V>{
    iter:DynTrait<'static,RBox<()>,ValIterInterface<u32,u32>>,
    _marker:PhantomData<Tuple2<K,V>>,
}

It compiles if I add a PhantomData<Rc<()>> field to IntoIter.

Context

The Send impl of DynTrait:

impl<'borr, P, I> Send for DynTrait<'borr, P, I> where
    P: Send,
    I: InterfaceBound<'borr, Send = True>, 
{}

Definition of InterfaceBound
Definition of InterfaceType
The InterfaceType impl of ValIterInterface:

crate::impl_InterfaceType!{
    impl<K,V> crate::InterfaceType for ValIterInterface<K,V> {
        type Send=False;
        type Sync=False;
        type Iterator=True;
    }
}

The impl_InterfaceType macro just sets the unmentioned associated types to False.

@rodrimati1992 rodrimati1992 changed the title rustdoc:fails to compile with type that has a field with conditional Send impl. rustdoc:ICE with field that has a conditional Send impl. May 11, 2019
@hellow554
Copy link
Contributor

Can you provide a small example (maybe on the playground) that will crash reproducibly?

@Aaron1011
Copy link
Member

@rodrimati1992: I can't reproduce this crash by running either stable or nightly on rodrimati1992/abi_stable_crates@d3c4327. Is there a particular commit I should use?

@Centril Centril added T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ labels May 11, 2019
@rodrimati1992
Copy link
Contributor Author

rodrimati1992 commented May 11, 2019

cargo doc crashes in these Rust versions(haven't tested any others):

  • rustc 1.34.0 (91856ed 2019-04-10) running on i686-unknown-linux-gnu

  • rustc 1.36.0-nightly (d595b11 2019-05-10) running on i686-unknown-linux-gnu

With this code:

use std::marker::PhantomData;

pub struct True;
pub struct False;

pub trait InterfaceType{
    type Send;
}


pub struct FooInterface<T>(PhantomData<fn()->T>);

impl<T> InterfaceType for FooInterface<T> {
    type Send=False;
}


pub struct DynTrait<I>{
    _interface:PhantomData<fn()->I>,
    _unsync_unsend:PhantomData<::std::rc::Rc<()>>,
}

unsafe impl<I> Send for DynTrait<I>
where
    I:InterfaceType<Send=True>
{}

pub struct IntoIter<T>{
    hello:DynTrait<FooInterface<T>>,
}

Output:

 Documenting the_error v0.1.0 (/home/matias/Documents/eclipse_workspace/tmp/the_error)
thread 'rustc' panicked at 'Unable to fulfill trait DefId(2:1386 ~ core[4c06]::marker[0]::Send[0]) for 'IntoIter<T>': [FulfillmentError(Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [FooInterface<T>], item_def_id: DefId(0:18 ~ the_error[8787]::InterfaceType[0]::Send[0]) }, True)),depth=2),MismatchedProjectionTypes(Sorts(ExpectedFound { expected: False, found: True })))]', src/librustc/traits/auto_trait.rs:202:17
stack backtrace:
   0: 0xb5cf6d4c - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::h88d972f6f6e46c24
                       at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1: 0xb5cef0fb - std::sys_common::backtrace::_print::h83aca1574431bbad
                       at src/libstd/sys_common/backtrace.rs:71
   2: 0xb5cf31aa - std::panicking::default_hook::{{closure}}::h54e8f04261c4c0b1
                       at src/libstd/sys_common/backtrace.rs:59
                       at src/libstd/panicking.rs:197
   3: 0xb5cf2ef4 - std::panicking::default_hook::h66422ac1b55ce676
                       at src/libstd/panicking.rs:211
   4: 0xb5cf3936 - std::panicking::rust_panic_with_hook::hbf2738690e9f5989
                       at src/libstd/panicking.rs:474
   5: 0xb5cf3476 - std::panicking::continue_panic_fmt::hcbef7b43feb6b8d9
                       at src/libstd/panicking.rs:381
   6: 0xb5cf33b9 - std::panicking::begin_panic_fmt::hfafa0a0090d76a4e
                       at src/libstd/panicking.rs:336
   7:   0x5ad31f - rustc::traits::auto_trait::AutoTraitFinder::find_auto_trait_generics::{{closure}}::{{closure}}::h3076052a80a2b2be
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::std::macros::panic macros>:8
   8:   0x5acd23 - rustc::ty::context::tls::with_context::{{closure}}::h68c2c2610d54ace6
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/result.rs:766
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/traits/auto_trait.rs:201
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/infer/mod.rs:529
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1726
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1966
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1899
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1965
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1725
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2071
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2055
   9:   0x5ab8d2 - rustc::ty::context::GlobalCtxt::enter_local::h90af253d10758aa1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2045
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2055
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:2067
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1717
  10:   0x5cd3f8 - rustc::traits::auto_trait::AutoTraitFinder::find_auto_trait_generics::h42ee2645b594cb59
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/infer/mod.rs:528
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/traits/auto_trait.rs:119
  11:   0x43d725 - core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut::h25ad1904ab0b7bc3
                       at src/librustdoc/clean/auto_trait.rs:50
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/ops/function.rs:269
  12:   0x6b213a - <core::iter::adapters::chain::Chain<A,B> as core::iter::traits::iterator::Iterator>::try_fold::hb3e3d5b042f42891
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/chain.rs:88
  13:   0x4c5cb1 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::ha8605cbc824c8642
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1809
  14:   0x690bdd - rustdoc::clean::get_auto_trait_and_blanket_impls::h6b2119eea5d33f2b
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/clean/auto_trait.rs:33
                       at src/librustdoc/clean/mod.rs:3787
  15:   0x6cc5b6 - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/passes/collect_trait_impls.rs:158
  16:   0x4c2448 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hf3f69d672ddf9615
                       at src/librustdoc/fold.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1572
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1609
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/adapters/mod.rs:812
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1929
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1826
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1821
  17:   0x6c909e - rustdoc::fold::DocFolder::fold_inner_recur::h3b90485174c31fb1
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/vec.rs:1721
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/iter/traits/iterator.rs:1465
                       at src/librustdoc/fold.rs:100
                       at src/librustdoc/fold.rs:27
  18:   0x6cc8ad - <rustdoc::passes::collect_trait_impls::SyntheticImplCollector as rustdoc::fold::DocFolder>::fold_item::h01bd6abc37807d9a
                       at src/librustdoc/fold.rs:90
                       at src/librustdoc/passes/collect_trait_impls.rs:166
  19:   0x6c9f8d - rustdoc::passes::collect_trait_impls::collect_trait_impls::h7ddbb0578e71ca0e
                       at src/librustdoc/fold.rs:105
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/option.rs:624
                       at src/librustdoc/fold.rs:105
                       at src/librustdoc/passes/collect_trait_impls.rs:17
  20:   0x5cb622 - rustc::ty::context::tls::enter_global::h0352a121287a69cf
                       at src/librustdoc/core.rs:465
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1999
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1966
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1899
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1965
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1998
  21:   0x5fc1d6 - rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}::h37af13ddc5734fca
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::rustc_data_structures::box_region::declare_box_region_type macros>:17
  22: 0xb7c1c368 - rustc_interface::passes::create_global_ctxt::{{closure}}::ha0f95b1f2df7a5e5
  23:   0x5fd24a - rustc_interface::interface::run_compiler_in_existing_thread_pool::hb0e8f2e4ea5e07c3
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:910
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_data_structures/box_region.rs:52
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e//<::rustc_data_structures::box_region::declare_box_region_type macros>:19
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/passes.rs:807
                       at src/librustdoc/core.rs:354
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/interface.rs:122
  24:   0x70a3f7 - rustdoc::core::run_core::h828402703fcc17cc
                       at src/librustdoc/core.rs:340
  25:   0x5aeb2e - <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h7b9fd07b2b1ea2c8
                       at src/librustdoc/lib.rs:450
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:309
  26:   0x4f3815 - std::panicking::try::do_call::hb936f360df81fcbb
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:293
  27: 0xb5d03447 - __rust_maybe_catch_panic
                       at src/libpanic_unwind/lib.rs:85
  28:   0x6d02cc - rustc_driver::report_ices_to_stderr_if_any::h7f9579b20d11e238
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:272
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:388
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_driver/lib.rs:1114
  29:   0x481438 - rustdoc::main_args::ha7dd5c6ee7b5b640
                       at src/librustdoc/lib.rs:447
                       at src/librustdoc/lib.rs:404
  30:   0x6abdda - std::thread::local::LocalKey<T>::with::ha9c7da692a148e8b
                       at src/librustdoc/lib.rs:98
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/option.rs:416
                       at src/librustdoc/lib.rs:98
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:186
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1954
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:299
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:245
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1946
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:299
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/local.rs:245
  31:   0x600c42 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha4de48f9125e55bb
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc/ty/context.rs:1938
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:186
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:182
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libsyntax/lib.rs:101
                       at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libsyntax/lib.rs:100
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:181
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/librustc_interface/util.rs:159
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/sys_common/backtrace.rs:136
  32:   0x4f3980 - std::panicking::try::do_call::hcb704b420ba15158
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/mod.rs:469
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:309
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:293
  33: 0xb5d03447 - __rust_maybe_catch_panic
                       at src/libpanic_unwind/lib.rs:85
  34:   0x6d7f8b - core::ops::function::FnOnce::call_once{{vtable.shim}}::h71980ce26ab01d54
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panicking.rs:272
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/panic.rs:388
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libstd/thread/mod.rs:468
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/libcore/ops/function.rs:231
  35: 0xb5cd6208 - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h2e642aeea9c9581f
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:704
  36: 0xb5d01e50 - std::sys::unix::thread::Thread::new::thread_start::ha576c140cc0cd745
                       at /rustc/d595b113584f8f446957469951fd5d31adc2a44e/src/liballoc/boxed.rs:704
                       at src/libstd/sys_common/thread.rs:13
                       at src/libstd/sys/unix/thread.rs:79
  37: 0xb5c4f294 - start_thread
  38: 0xb5b5c0ad - __clone
  39:        0x0 - <unknown>

error: internal compiler error: unexpected panic

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: rustc 1.36.0-nightly (d595b1135 2019-05-10) running on i686-unknown-linux-gnu

Aaron1011 added a commit to Aaron1011/rust that referenced this issue May 13, 2019
Fixes rust-lang#60726

Previous, AutoTraitFinder would only try to project predicates when the
predicate type contained an inference variable. When finding auto
traits, we only project to try to unify inference variables - we don't
otherwise learn any new information about the required bounds.

However, this lead to failing to properly generate a negative auto trait
impl (indicating that a type never implements a certain auto trait) in
the following unusual scenario:

In almost all cases, a type has an (implicit) negative impl of an auto
trait due some other type having an explicit *negative* impl of that
auto trait. For example:

struct MyType<T> {
    field: *const T
}

has an implicit 'impl<T> !Send for MyType<T>', due to the explicit
negative impl (in libcore) 'impl<T: ?Sized> !Send for *const T'.

However, as exposed by the 'abi_stable' crate, this isn't always the
case. This minimzed example shows how a type can never implement
'Send', due to a projection error:

```
pub struct True;
pub struct False;

pub trait MyTrait {
    type Project;
}

pub struct MyStruct<T> {
    field: T
}

impl MyTrait for u8 {
    type Project = False;
}

unsafe impl<T> Send for MyStruct<T>
    where T: MyTrait<Project=True> {}

pub struct Wrapper {
    inner: MyStruct<u8>
}
```

In this example, `<u8 as MyTrait>::Project == True'
must hold for 'MyStruct<u8>: Send' to hold.
However, '<u8 as MyTrait>::Project == False' holds instead

To properly account for this unusual case, we need to call
'poly_project_and_unify' on *all* predicates, not just those with
inference variables. This ensures that we catch the projection error
that occurs above, and don't incorrectly determine that 'Wrapper: Send'
holds.
Centril added a commit to Centril/rust that referenced this issue May 22, 2019
…r=eddyb

Always try to project predicates when finding auto traits in rustdoc

Fixes rust-lang#60726

Previous, AutoTraitFinder would only try to project predicates when the
predicate type contained an inference variable. When finding auto
traits, we only project to try to unify inference variables - we don't
otherwise learn any new information about the required bounds.

However, this lead to failing to properly generate a negative auto trait
impl (indicating that a type never implements a certain auto trait) in
the following unusual scenario:

In almost all cases, a type has an (implicit) negative impl of an auto
trait due some other type having an explicit *negative* impl of that
auto trait. For example:

struct MyType<T> {
    field: *const T
}

has an implicit 'impl<T> !Send for MyType<T>', due to the explicit
negative impl (in libcore) 'impl<T: ?Sized> !Send for *const T'.

However, as exposed by the 'abi_stable' crate, this isn't always the
case. This minimzed example shows how a type can never implement
'Send', due to a projection error:

```
pub struct True;
pub struct False;

pub trait MyTrait {
    type Project;
}

pub struct MyStruct<T> {
    field: T
}

impl MyTrait for u8 {
    type Project = False;
}

unsafe impl<T> Send for MyStruct<T>
    where T: MyTrait<Project=True> {}

pub struct Wrapper {
    inner: MyStruct<u8>
}
```

In this example, `<u8 as MyTrait>::Project == True'
must hold for 'MyStruct<u8>: Send' to hold.
However, '<u8 as MyTrait>::Project == False' holds instead

To properly account for this unusual case, we need to call
'poly_project_and_unify' on *all* predicates, not just those with
inference variables. This ensures that we catch the projection error
that occurs above, and don't incorrectly determine that 'Wrapper: Send'
holds.
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) ❄️ T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants