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 when generic constraint involving trait alias is not met #108072

Closed
eggyal opened this issue Feb 15, 2023 · 4 comments · Fixed by #108115
Closed

ICE when generic constraint involving trait alias is not met #108072

eggyal opened this issue Feb 15, 2023 · 4 comments · Fixed by #108115
Assignees
Labels
C-bug Category: This is a bug. F-trait_alias `#![feature(trait_alias)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@eggyal
Copy link
Contributor

eggyal commented Feb 15, 2023

Code

#![feature(trait_alias)]

trait IteratorAlias = Iterator;

fn f(_: impl IteratorAlias) {}

fn main() {
    f(())
}

Playground

Meta

rustc --version --verbose:

rustc 1.69.0-nightly (0416b1a6f 2023-02-14)
binary: rustc
commit-hash: 0416b1a6f6d5c42696494e1a3a33580fd3f669d8
commit-date: 2023-02-14
host: x86_64-unknown-linux-gnu
release: 1.69.0-nightly
LLVM version: 15.0.7

Error output

thread 'rustc' panicked at 'expected an impl item, found Item { ident: IteratorAlias#0, owner_id: DefId(0:3 ~ playground[b795]::IteratorAlias), kind: TraitAlias(Generics { params: [], predicates: [], has_where_clause_predicates: false, where_clause_span: src/main.rs:3:31: 3:31 (#0), span: src/main.rs:3:20: 3:20 (#0) }, [Trait(PolyTraitRef { bound_generic_params: [], trait_ref: TraitRef { path: Path { span: src/main.rs:3:23: 3:31 (#0), res: Def(Trait, DefId(2:7197 ~ core[a4f4]::iter::traits::iterator::Iterator)), segments: [PathSegment { ident: Iterator#0, hir_id: HirId(DefId(0:3 ~ playground[b795]::IteratorAlias).1), res: Def(Trait, DefId(2:7197 ~ core[a4f4]::iter::traits::iterator::Iterator)), args: None, infer_args: false }] }, hir_ref_id: HirId(DefId(0:3 ~ playground[b795]::IteratorAlias).2) }, span: src/main.rs:3:23: 3:31 (#0) }, None)]), span: src/main.rs:3:1: 3:32 (#0), vis_span: src/main.rs:3:1: 3:1 (#0) }', compiler/rustc_hir_analysis/src/collect.rs:1345:62
Backtrace

   0:     0x7fd385dc69ea - std::backtrace_rs::backtrace::libunwind::trace::hbdb546ca92cb6d78
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7fd385dc69ea - std::backtrace_rs::backtrace::trace_unsynchronized::hc6fce42db22bfc5e
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7fd385dc69ea - std::sys_common::backtrace::_print_fmt::h81df7bc0b23e5237
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7fd385dc69ea - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc59be13e437abc01
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7fd385e26afe - core::fmt::write::h52ae72821e51c26c
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/core/src/fmt/mod.rs:1232:17
   5:     0x7fd385db7005 - std::io::Write::write_fmt::hd87c8dd79580982c
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/io/mod.rs:1684:15
   6:     0x7fd385dc67b5 - std::sys_common::backtrace::_print::h20f47bfc31ead101
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x7fd385dc67b5 - std::sys_common::backtrace::print::ha898201a02f1983d
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x7fd385dc954f - std::panicking::default_hook::{{closure}}::h53f82cfee6bbc6bc
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/panicking.rs:267:22
   9:     0x7fd385dc928b - std::panicking::default_hook::ha6709b03b61260ba
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/panicking.rs:286:9
  10:     0x7fd389125e94 - <rustc_driver_impl[e0927287439ac92b]::DEFAULT_HOOK::{closure#0}::{closure#0} as core[a4f442881c2ef06d]::ops::function::FnOnce<(&core[a4f442881c2ef06d]::panic::panic_info::PanicInfo,)>>::call_once::{shim:vtable#0}
  11:     0x7fd385dc9d8a - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h2eed0239097b069b
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/alloc/src/boxed.rs:2002:9
  12:     0x7fd385dc9d8a - std::panicking::rust_panic_with_hook::h1feda37d03dc2311
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/panicking.rs:692:13
  13:     0x7fd385dc9b09 - std::panicking::begin_panic_handler::{{closure}}::h04d1fa7b2fbcb101
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/panicking.rs:579:13
  14:     0x7fd385dc6e8c - std::sys_common::backtrace::__rust_end_short_backtrace::hd635f2032b0cab87
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys_common/backtrace.rs:137:18
  15:     0x7fd385dc9812 - rust_begin_unwind
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/panicking.rs:575:5
  16:     0x7fd385e234a3 - core::panicking::panic_fmt::h5d8c50f99f6f87ff
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/core/src/panicking.rs:64:14
  17:     0x7fd3891ee589 - <rustc_hir[2543b51deb511ab7]::hir::Item>::expect_failed
  18:     0x7fd3884c8558 - rustc_hir_analysis[baeabd04615cee02]::collect::impl_trait_ref
  19:     0x7fd388aa72ef - <rustc_query_impl[9dfc87ac15399443]::Queries as rustc_middle[db7416be43adeac6]::ty::query::QueryEngine>::impl_trait_ref
  20:     0x7fd3892b198c - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::blame_specific_expr_if_possible_for_obligation_cause_code
  21:     0x7fd3892b1887 - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::blame_specific_expr_if_possible
  22:     0x7fd3892b17c7 - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::blame_specific_arg_if_possible
  23:     0x7fd3892b0cf8 - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::adjust_fulfillment_error_for_expr_obligation
  24:     0x7fd3892b77d5 - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::adjust_fulfillment_errors_for_expr_obligation
  25:     0x7fd3874563ff - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_argument_types
  26:     0x7fd387424d2d - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_call
  27:     0x7fd3871bf02f - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  28:     0x7fd3871ffefd - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_block_with_expected
  29:     0x7fd3871bf570 - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  30:     0x7fd387c5fa3b - <rustc_hir_typeck[6038900cd713a4a3]::fn_ctxt::FnCtxt>::check_return_expr
  31:     0x7fd387c57016 - rustc_hir_typeck[6038900cd713a4a3]::check::check_fn
  32:     0x7fd387c3b2c0 - rustc_hir_typeck[6038900cd713a4a3]::typeck
  33:     0x7fd3872aa9d3 - rustc_query_system[aacab3c8f4295403]::query::plumbing::try_execute_query::<rustc_query_impl[9dfc87ac15399443]::queries::typeck, rustc_query_impl[9dfc87ac15399443]::plumbing::QueryCtxt>
  34:     0x7fd38885eaab - rustc_data_structures[86913d64ad6510b]::sync::par_for_each_in::<&[rustc_span[b67a18860b098bfc]::def_id::LocalDefId], <rustc_middle[db7416be43adeac6]::hir::map::Map>::par_body_owners<rustc_hir_typeck[6038900cd713a4a3]::typeck_item_bodies::{closure#0}>::{closure#0}>
  35:     0x7fd38885e8a1 - rustc_hir_typeck[6038900cd713a4a3]::typeck_item_bodies
  36:     0x7fd3886958b3 - rustc_query_system[aacab3c8f4295403]::query::plumbing::try_execute_query::<rustc_query_impl[9dfc87ac15399443]::queries::typeck_item_bodies, rustc_query_impl[9dfc87ac15399443]::plumbing::QueryCtxt>
  37:     0x7fd388aaa66b - <rustc_query_impl[9dfc87ac15399443]::Queries as rustc_middle[db7416be43adeac6]::ty::query::QueryEngine>::typeck_item_bodies
  38:     0x7fd38856e37e - <rustc_session[5f5732a9ce5d58bc]::session::Session>::time::<(), rustc_hir_analysis[baeabd04615cee02]::check_crate::{closure#7}>
  39:     0x7fd38856b5a0 - rustc_hir_analysis[baeabd04615cee02]::check_crate
  40:     0x7fd3885659f0 - rustc_interface[da2bca27cf188e3c]::passes::analysis
  41:     0x7fd3888b9602 - rustc_query_system[aacab3c8f4295403]::query::plumbing::try_execute_query::<rustc_query_impl[9dfc87ac15399443]::queries::analysis, rustc_query_impl[9dfc87ac15399443]::plumbing::QueryCtxt>
  42:     0x7fd388aa274a - <rustc_query_impl[9dfc87ac15399443]::Queries as rustc_middle[db7416be43adeac6]::ty::query::QueryEngine>::analysis
  43:     0x7fd3887a5c19 - <rustc_middle[db7416be43adeac6]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}::{closure#2}::{closure#3}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>
  44:     0x7fd388327f49 - <rustc_interface[da2bca27cf188e3c]::interface::Compiler>::enter::<rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}::{closure#2}, core[a4f442881c2ef06d]::result::Result<core[a4f442881c2ef06d]::option::Option<rustc_interface[da2bca27cf188e3c]::queries::Linker>, rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>
  45:     0x7fd3883230c4 - rustc_span[b67a18860b098bfc]::with_source_map::<core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>, rustc_interface[da2bca27cf188e3c]::interface::run_compiler<core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>, rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  46:     0x7fd388322bd4 - <scoped_tls[7e7c0fc199c1fd10]::ScopedKey<rustc_span[b67a18860b098bfc]::SessionGlobals>>::set::<rustc_interface[da2bca27cf188e3c]::interface::run_compiler<core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>, rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}>::{closure#0}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>
  47:     0x7fd3883222d2 - std[c4719229b53c8129]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[da2bca27cf188e3c]::util::run_in_thread_pool_with_globals<rustc_interface[da2bca27cf188e3c]::interface::run_compiler<core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>, rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}>::{closure#0}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>
  48:     0x7fd3889bd5fc - <<std[c4719229b53c8129]::thread::Builder>::spawn_unchecked_<rustc_interface[da2bca27cf188e3c]::util::run_in_thread_pool_with_globals<rustc_interface[da2bca27cf188e3c]::interface::run_compiler<core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>, rustc_driver_impl[e0927287439ac92b]::run_compiler::{closure#1}>::{closure#0}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a4f442881c2ef06d]::result::Result<(), rustc_errors[138a5dc35f5b9460]::ErrorGuaranteed>>::{closure#1} as core[a4f442881c2ef06d]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  49:     0x7fd385dd3d23 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h16d50f6a791b9ecf
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/alloc/src/boxed.rs:1988:9
  50:     0x7fd385dd3d23 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hcb8a06476f463180
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/alloc/src/boxed.rs:1988:9
  51:     0x7fd385dd3d23 - std::sys::unix::thread::Thread::new::thread_start::hf9921b6eef74fae1
                               at /rustc/0416b1a6f6d5c42696494e1a3a33580fd3f669d8/library/std/src/sys/unix/thread.rs:108:17
  52:     0x7fd385c96609 - start_thread
  53:     0x7fd385bb9133 - clone
  54:                0x0 - <unknown>

@eggyal eggyal added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 15, 2023
@Noratrieb Noratrieb added the F-trait_alias `#![feature(trait_alias)]` label Feb 15, 2023
@eggyal
Copy link
Contributor Author

eggyal commented Feb 15, 2023

searched nightlies: from nightly-2023-01-01 to nightly-2023-02-15
regressed nightly: nightly-2023-02-07
searched commits: from 75a0be9 to e1eaa2d
regressed commit: e1eaa2d

bisected with cargo-bisect-rustc v0.6.0

Host triple: x86_64-unknown-linux-gnu
Reproduce with:

cargo bisect-rustc --without-cargo --preserve --start 2023-01-01 --end 2023-02-15 --prompt -- check 

Of that rollup, #106477 looks most likely responsible to me. cc @Nathan-Fenner

@eggyal
Copy link
Contributor Author

eggyal commented Feb 15, 2023

@rustbot claim

@Nathan-Fenner
Copy link
Contributor

Ah, I had assumed that the call to impl_trait_ref in blame_specific_expr_if_possible_for_derived_predicate_obligation was infallible (at least in this context), but apparently not.

So prior to calling this, the function should verify that it has the right kind, and if not, bail out (return Err(expr);). Ideally it would resolve the trait alias too, but there's enough existing corner-cases which aren't handled that it isn't a big deal.

@eggyal
Copy link
Contributor Author

eggyal commented Feb 15, 2023

Actually, I think the problem arises earlier, when building derived obligations for trait aliases: they shouldn't be ImplDerivedObligations at all. I have a fix, about to push.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. F-trait_alias `#![feature(trait_alias)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
3 participants