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(expected defining type in borrowck) when existential type causes type error #74282

Closed
meithecatte opened this issue Jul 12, 2020 · 2 comments · Fixed by #94081
Closed

ICE(expected defining type in borrowck) when existential type causes type error #74282

meithecatte opened this issue Jul 12, 2020 · 2 comments · Fixed by #94081
Labels
C-bug Category: This is a bug. F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` glacier ICE tracked in rust-lang/glacier. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-low Low priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. requires-nightly This issue requires a nightly compiler in some way. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@meithecatte
Copy link
Contributor

This might be related to #74280, but I am reporting this issue separately as the panic message and location are entirely different. When I try to minimize it further, the panic message changes.

Code

#![feature(type_alias_impl_trait)]

type Closure = impl Fn() -> u64;
struct Anonymous(Closure);

fn test() {
    let y = || -> Closure { || 3 };
    Anonymous(|| {
        3
    })
}

Meta

rustc --version --verbose:

rustc 1.46.0-nightly (346aec9b0 2020-07-11)
binary: rustc
commit-hash: 346aec9b02f3c74f3fce97fd6bda24709d220e49
commit-date: 2020-07-11
host: x86_64-unknown-linux-gnu
release: 1.46.0-nightly
LLVM version: 10.0

Error output

error[E0308]: mismatched types
  --> rust-ice2.rs:8:15
   |
3  |   type Closure = impl Fn() -> u64;
   |                  ---------------- the expected opaque type
...
8  |       Anonymous(|| {
   |  _______________^
9  | |         3
10 | |     })
   | |_____^ expected opaque type, found closure
   |
   = note: expected opaque type `impl std::ops::Fn<()>`
                  found closure `[closure@rust-ice2.rs:8:15: 10:6]`

error[E0308]: mismatched types
  --> rust-ice2.rs:8:5
   |
8  | /     Anonymous(|| {
9  | |         3
10 | |     })
   | |______^ expected `()`, found struct `Anonymous`
   |
help: try adding a semicolon
   |
10 |     });
   |       ^
help: try adding a return type
   |
6  | fn test() -> Anonymous {
   |           ^^^^^^^^^^^^

error: internal compiler error: src/librustc_mir/borrow_check/universal_regions.rs:532:26: expected defining type for `DefId(0:11 ~ rust_ice2[317d]::test[0]::{{closure}}[1])`: `[type error]`
  --> rust-ice2.rs:8:15
   |
8  |       Anonymous(|| {
   |  _______________^
9  | |         3
10 | |     })
   | |_____^
Backtrace

thread 'rustc' panicked at 'Box<Any>', /rustc/346aec9b02f3c74f3fce97fd6bda24709d220e49/src/libstd/macros.rs:13:23
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at src/libstd/sys_common/backtrace.rs:78
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at src/libstd/sys_common/backtrace.rs:59
   4: core::fmt::write
             at src/libcore/fmt/mod.rs:1076
   5: std::io::Write::write_fmt
             at src/libstd/io/mod.rs:1537
   6: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:62
   7: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:49
   8: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:198
   9: std::panicking::default_hook
             at src/libstd/panicking.rs:217
  10: rustc_driver::report_ice
  11: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:530
  12: std::panicking::begin_panic
  13: rustc_errors::HandlerInner::span_bug
  14: rustc_errors::Handler::span_bug
  15: rustc_middle::util::bug::opt_span_bug_fmt::{{closure}}
  16: rustc_middle::ty::context::tls::with_opt::{{closure}}
  17: rustc_middle::ty::context::tls::with_opt
  18: rustc_middle::util::bug::opt_span_bug_fmt
  19: rustc_middle::util::bug::span_bug_fmt
  20: rustc_mir::borrow_check::universal_regions::UniversalRegions::new
  21: rustc_mir::borrow_check::do_mir_borrowck
  22: rustc_infer::infer::InferCtxtBuilder::enter
  23: rustc_mir::borrow_check::mir_borrowck
  24: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_borrowck>::compute
  25: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  26: rustc_data_structures::stack::ensure_sufficient_stack
  27: rustc_query_system::query::plumbing::get_query_impl
  28: rustc_typeck::collect::type_of::find_opaque_ty_constraints::ConstraintLocator::check
  29: rustc_hir::intravisit::walk_expr
  30: rustc_hir::intravisit::walk_expr
  31: rustc_hir::intravisit::walk_fn
  32: rustc_hir::intravisit::walk_item
  33: rustc_hir::intravisit::Visitor::visit_nested_item
  34: rustc_typeck::collect::type_of::type_of
  35: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::type_of>::compute
  36: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  37: rustc_data_structures::stack::ensure_sufficient_stack
  38: rustc_query_system::query::plumbing::get_query_impl
  39: rustc_query_system::query::plumbing::ensure_query_impl
  40: <rustc_typeck::collect::CollectItemTypesVisitor as rustc_hir::intravisit::Visitor>::visit_item
  41: rustc_middle::hir::map::Map::visit_item_likes_in_module
  42: rustc_typeck::collect::collect_mod_item_types
  43: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::collect_mod_item_types>::compute
  44: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  45: rustc_data_structures::stack::ensure_sufficient_stack
  46: rustc_query_system::query::plumbing::get_query_impl
  47: rustc_query_system::query::plumbing::ensure_query_impl
  48: rustc_session::session::Session::track_errors
  49: rustc_typeck::check_crate
  50: rustc_interface::passes::analysis
  51: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::analysis>::compute
  52: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  53: rustc_query_system::query::plumbing::get_query_impl
  54: rustc_middle::ty::context::tls::enter_global
  55: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
  56: rustc_span::with_source_map
  57: rustc_interface::interface::create_compiler_and_run
  58: scoped_tls::ScopedKey<T>::set
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

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.46.0-nightly (346aec9b0 2020-07-11) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [mir_borrowck] borrow-checking `test::{{closure}}#1`
#1 [type_of] computing type of `Closure::{{opaque}}#0`
#2 [collect_mod_item_types] collecting item types in top-level module
#3 [analysis] running analysis passes on this crate
end of query stack

@meithecatte meithecatte 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 Jul 12, 2020
@jonas-schievink jonas-schievink added the F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` label Jul 12, 2020
@rust-lang-glacier-bot rust-lang-glacier-bot added the glacier ICE tracked in rust-lang/glacier. label Jul 14, 2020
@matthiaskrgr
Copy link
Member

This ICEs since 1.43
@rustbot modify labels: +regression-from-stable-to-stable

@rustbot rustbot added regression-from-stable-to-stable Performance or correctness regression from one stable version to another. I-prioritize Issue: Indicates that prioritization has been requested for this issue. labels Dec 20, 2020
@camelid camelid added the requires-nightly This issue requires a nightly compiler in some way. label Dec 20, 2020
@camelid
Copy link
Member

camelid commented Dec 20, 2020

Assigning P-low and removing I-prioritize as discussed in the prioritization working group.

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-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` glacier ICE tracked in rust-lang/glacier. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-low Low priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. requires-nightly This issue requires a nightly compiler in some way. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Development

Successfully merging a pull request may close this issue.

7 participants