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 assertion failed: self.is_struct() || self.is_union() #75977

Closed
matthiaskrgr opened this issue Aug 27, 2020 · 1 comment · Fixed by #75985
Closed

ICE assertion failed: self.is_struct() || self.is_union() #75977

matthiaskrgr opened this issue Aug 27, 2020 · 1 comment · Fixed by #75985
Assignees
Labels
A-async-await Area: Async & Await 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.

Comments

@matthiaskrgr
Copy link
Member

matthiaskrgr commented Aug 27, 2020

Code

code from ./src/test/ui/async-await/issues/issue-64433.rs

#[derive(Debug)]
struct A<'a> {
    inner: Vec<&'a str>,
}

struct B {}

impl B {
    async fn something_with_a(&mut self, a: A<'_>) -> Result<(), String> {
        println!("{:?}", a);
        Ok(())
    }
}

async fn can_error(some_string: &str) -> Result<(), String> {
    let a = A { inner: vec![some_string, "foo"] };
    let mut b = B {};
    Ok(b.something_with_a(a).await.map(drop)?)
}

fn main() {
}

Meta

repo @ f7cbb7a

Error output

rustc ./src/test/ui/async-await/issues/issue-64433.rs

error[E0670]: `async fn` is not permitted in the 2015 edition
  --> ./src/test/ui/async-await/issues/issue-64433.rs:17:5
   |
17 |     async fn something_with_a(&mut self, a: A<'_>) -> Result<(), String> {
   |     ^^^^^ to use `async fn`, switch to Rust 2018
   |
   = help: set `edition = "2018"` in `Cargo.toml`
   = note: for more on editions, read https://doc.rust-lang.org/edition-guide

error[E0670]: `async fn` is not permitted in the 2015 edition
  --> ./src/test/ui/async-await/issues/issue-64433.rs:23:1
   |
23 | async fn can_error(some_string: &str) -> Result<(), String> {
   | ^^^^^ to use `async fn`, switch to Rust 2018
   |
   = help: set `edition = "2018"` in `Cargo.toml`
   = note: for more on editions, read https://doc.rust-lang.org/edition-guide

thread 'rustc' panicked at 'assertion failed: self.is_struct() || self.is_union()', src/librustc_middle/ty/mod.rs:2462:9
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/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.47.0-dev running on x86_64-unknown-linux-gnu

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0670`.
Backtrace

error[E0670]: `async fn` is not permitted in the 2015 edition
  --> ./src/test/ui/async-await/issues/issue-64433.rs:17:5
   |
17 |     async fn something_with_a(&mut self, a: A<'_>) -> Result<(), String> {
   |     ^^^^^ to use `async fn`, switch to Rust 2018
   |
   = help: set `edition = "2018"` in `Cargo.toml`
   = note: for more on editions, read https://doc.rust-lang.org/edition-guide

error[E0670]: `async fn` is not permitted in the 2015 edition
  --> ./src/test/ui/async-await/issues/issue-64433.rs:23:1
   |
23 | async fn can_error(some_string: &str) -> Result<(), String> {
   | ^^^^^ to use `async fn`, switch to Rust 2018
   |
   = help: set `edition = "2018"` in `Cargo.toml`
   = note: for more on editions, read https://doc.rust-lang.org/edition-guide

thread 'rustc' panicked at 'assertion failed: self.is_struct() || self.is_union()', src/librustc_middle/ty/mod.rs:2462:9
stack backtrace:
   0:     0x7f6876aec9d1 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9a65342185cb7022
   1:     0x7f6876b5bddd - core::fmt::write::hc3de054a6627b208
   2:     0x7f6876ae86d3 - std::io::Write::write_fmt::h64bd8d8dca95fd5c
   3:     0x7f6876ac4f30 - std::panicking::default_hook::{{closure}}::ha9c6947a872dc513
   4:     0x7f6876ac4c5a - std::panicking::default_hook::h3e5e46d076456208
   5:     0x7f6877a5ea39 - rustc_driver::report_ice::h57f0d27cc4a04c23
   6:     0x7f6876ac5566 - std::panicking::rust_panic_with_hook::h30c558028146672c
   7:     0x7f687a1e79c6 - std::panicking::begin_panic::{{closure}}::ha2039aacacabea10
   8:     0x7f687a1e791e - std::sys_common::backtrace::__rust_end_short_backtrace::h55fed0695fca8afd
   9:     0x7f6879eded2c - std::panicking::begin_panic::h4b19ffbdfe6cf88f
  10:     0x7f687a28a01b - rustc_middle::ty::AdtDef::non_enum_variant::h718fab7cd60aa158
  11:     0x7f687859acde - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  12:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  13:     0x7f687858e705 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  14:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  15:     0x7f68785e84f1 - rustc_typeck::check::FnCtxt::check_argument_types::h14872ae1f85eb423
  16:     0x7f68785754e5 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::confirm_builtin_call::h1aa575ced20bb34a
  17:     0x7f6878573674 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::check_call::h33382c8fd4653d24
  18:     0x7f687858e618 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  19:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  20:     0x7f687856fb6c - rustc_typeck::check::_match::<impl rustc_typeck::check::FnCtxt>::check_match::hc64227438a3f51a3
  21:     0x7f687858e4b6 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  22:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  23:     0x7f68785e84f1 - rustc_typeck::check::FnCtxt::check_argument_types::h14872ae1f85eb423
  24:     0x7f68785754e5 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::confirm_builtin_call::h1aa575ced20bb34a
  25:     0x7f6878573674 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::check_call::h33382c8fd4653d24
  26:     0x7f687858e618 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  27:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  28:     0x7f68785ed73d - rustc_typeck::check::FnCtxt::check_block_with_expected::h0120320be67b2e03
  29:     0x7f687858e40d - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  30:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  31:     0x7f6878591e54 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  32:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  33:     0x7f68785ed73d - rustc_typeck::check::FnCtxt::check_block_with_expected::h0120320be67b2e03
  34:     0x7f687858e40d - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  35:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  36:     0x7f687859e32a - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_return_expr::he2854b1e21329dac
  37:     0x7f68785d233f - rustc_typeck::check::check_fn::h9dd34b94a4dc33db
  38:     0x7f687857816e - rustc_typeck::check::closure::<impl rustc_typeck::check::FnCtxt>::check_expr_closure::he442a7a865fbcaf5
  39:     0x7f6878591d53 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  40:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  41:     0x7f68785e84f1 - rustc_typeck::check::FnCtxt::check_argument_types::h14872ae1f85eb423
  42:     0x7f68785754e5 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::confirm_builtin_call::h1aa575ced20bb34a
  43:     0x7f6878573674 - rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::check_call::h33382c8fd4653d24
  44:     0x7f687858e618 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::hea25d5e0a0fe9226
  45:     0x7f687858df92 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation::he6548213409ca983
  46:     0x7f687859e32a - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_return_expr::he2854b1e21329dac
  47:     0x7f68785d233f - rustc_typeck::check::check_fn::h9dd34b94a4dc33db
  48:     0x7f68785ce566 - rustc_typeck::check::typeck::h5859c4380841a586
  49:     0x7f687a4914c7 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::ha22b1bb86cb84b61
  50:     0x7f6879ed23d6 - rustc_data_structures::stack::ensure_sufficient_stack::h749101b2abd5fb91
  51:     0x7f687a31f74b - rustc_query_system::query::plumbing::get_query_impl::h3839a9e24c25c72d
  52:     0x7f6879fe2ef2 - rustc_middle::ty::context::TyCtxt::typeck_opt_const_arg::hb1b96dc71f356509
  53:     0x7f6878ba1d08 - rustc_mir_build::thir::cx::Cx::new::h90c83c3e63945347
  54:     0x7f6878ada085 - rustc_infer::infer::InferCtxtBuilder::enter::hac9be9830201ea1f
  55:     0x7f6878b74c60 - rustc_mir_build::build::mir_built::h5abff24a21d30eaa
  56:     0x7f6878e21e41 - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_built>::compute::h5643b00ddb333dc6
  57:     0x7f6878c8bfc3 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::hf007c9577a62290a
  58:     0x7f6878c9bede - rustc_data_structures::stack::ensure_sufficient_stack::hbe75214c03accc9c
  59:     0x7f68790d0328 - rustc_query_system::query::plumbing::get_query_impl::hd0c1a7ea5baadb38
  60:     0x7f6878ed40e0 - rustc_mir::transform::check_unsafety::unsafety_check_result::hc669ba4ddf4562d0
  61:     0x7f6878e3e4e2 - core::ops::function::FnOnce::call_once::hecb5ca4063fdd97b
  62:     0x7f6878e2366e - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::unsafety_check_result>::compute::hcc436ff698043792
  63:     0x7f6878c86540 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::h8f9a4da01f3951da
  64:     0x7f6878c9b269 - rustc_data_structures::stack::ensure_sufficient_stack::h9bd7d2ce9166420b
  65:     0x7f68790dcae4 - rustc_query_system::query::plumbing::get_query_impl::he20a00125afe0eed
  66:     0x7f68790f6e9d - rustc_query_system::query::plumbing::ensure_query_impl::hbdffa89d2d1dacca
  67:     0x7f6878ee3bc3 - rustc_mir::transform::mir_const::hacf312b07816630c
  68:     0x7f6878e21f21 - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_const>::compute::hd2e1914962fb6a06
  69:     0x7f6878c8bfc3 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::hf007c9577a62290a
  70:     0x7f6878c9bede - rustc_data_structures::stack::ensure_sufficient_stack::hbe75214c03accc9c
  71:     0x7f68790d0328 - rustc_query_system::query::plumbing::get_query_impl::hd0c1a7ea5baadb38
  72:     0x7f6878ee3fb4 - rustc_mir::transform::mir_promoted::h9c08818b4bb69491
  73:     0x7f6878e22411 - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_promoted>::compute::h21c2cd3b839f2c93
  74:     0x7f6878c87357 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::ha281f2e67a0f94d0
  75:     0x7f6878c98bd7 - rustc_data_structures::stack::ensure_sufficient_stack::h515e22feec1020fc
  76:     0x7f687909c3b3 - rustc_query_system::query::plumbing::get_query_impl::h4cb2be2abf3f28b2
  77:     0x7f6878e92081 - rustc_mir::borrow_check::mir_borrowck::h9c6fd2f7cc6101e2
  78:     0x7f6878e3e422 - core::ops::function::FnOnce::call_once::hea1c9614c3180aaf
  79:     0x7f687863da1e - 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::h80d53cc8b64d2bd7
  80:     0x7f687845ac00 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::he1ad9a4e382a9882
  81:     0x7f68784609d9 - rustc_data_structures::stack::ensure_sufficient_stack::h0aca12c2381bea1e
  82:     0x7f68786b3a79 - rustc_query_system::query::plumbing::get_query_impl::hc22d375c5e4411df
  83:     0x7f6878781d89 - rustc_typeck::collect::type_of::type_of::h8ea1060223d0b75d
  84:     0x7f687a497abf - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::hbe16ef99e8286bc0
  85:     0x7f6879ecd9c8 - rustc_data_structures::stack::ensure_sufficient_stack::h36b08436e738f087
  86:     0x7f687a390966 - rustc_query_system::query::plumbing::get_query_impl::hbb78aaa608913d7c
  87:     0x7f6879fddc8e - rustc_middle::ty::util::OpaqueTypeExpander::expand_opaque_ty::h64921e7e283d33a0
  88:     0x7f6879fdd887 - rustc_middle::ty::util::<impl rustc_middle::ty::context::TyCtxt>::try_expand_impl_trait_type::h7d841ef034d249d8
  89:     0x7f68785d5c12 - rustc_typeck::check::check_item_type::hcbbc2ed700a9ff17
  90:     0x7f6878429aa9 - rustc_middle::hir::map::Map::visit_item_likes_in_module::he01f52ca6f0eeda3
  91:     0x7f68785cb8ad - rustc_typeck::check::check_mod_item_types::h643fd85d0ce28ec4
  92:     0x7f687863e70e - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::check_mod_item_types>::compute::h3eed883eaab65fb9
  93:     0x7f6878459e60 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::hc77c4923073dde05
  94:     0x7f68784621a9 - rustc_data_structures::stack::ensure_sufficient_stack::h2ddab409d2718558
  95:     0x7f687866a4c0 - rustc_query_system::query::plumbing::get_query_impl::h3d7e43820c74c77d
  96:     0x7f68786e11ce - rustc_query_system::query::plumbing::ensure_query_impl::h4e8e20c10057d6fe
  97:     0x7f6878644209 - rustc_session::utils::<impl rustc_session::session::Session>::time::hbdbb6c0368195ab0
  98:     0x7f68784ebefc - rustc_typeck::check_crate::h4b5354c0b30e33ef
  99:     0x7f6877e8c9e5 - rustc_interface::passes::analysis::hfcd283d82bf63033
 100:     0x7f68779f65a2 - rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::analysis>::compute::hb7820b5bff8e5cd6
 101:     0x7f6877a0ae20 - rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl::h8ff0a86112af9468
 102:     0x7f68779f73e5 - rustc_middle::ty::query::plumbing::<impl rustc_query_system::query::QueryContext for rustc_middle::ty::context::TyCtxt>::start_query::{{closure}}::{{closure}}::{{closure}}::h72b7040b8ecb21fb
 103:     0x7f6877a0f074 - rustc_data_structures::stack::ensure_sufficient_stack::hde2925dd412e7d36
 104:     0x7f6877b83657 - rustc_query_system::query::plumbing::get_query_impl::h08dd3a185b40b43c
 105:     0x7f68779fe994 - rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter::h3d6d3a71d6d27568
 106:     0x7f6877b79913 - rustc_span::with_source_map::hdfd15c7680d138eb
 107:     0x7f68779f035e - scoped_tls::ScopedKey<T>::set::h82ba2255333cb76d
 108:     0x7f6877b9091c - std::sys_common::backtrace::__rust_begin_short_backtrace::h8e50cf7ebb5c7a2e
 109:     0x7f6877b92dce - core::ops::function::FnOnce::call_once{{vtable.shim}}::heded94bdd24516ed
 110:     0x7f6876ac7128 - std::sys::unix::thread::Thread::new::thread_start::hdc96d124dc384f80
 111:     0x7f6873642422 - start_thread
 112:     0x7f68768c9bf3 - __clone
 113:                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/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.47.0-dev running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [typeck] type-checking `can_error`
#1 [mir_built] building MIR for `can_error`
#2 [unsafety_check_result] unsafety-checking `can_error`
#3 [mir_const] processing MIR for `can_error`
#4 [mir_promoted] processing `can_error`
#5 [mir_borrowck] borrow-checking `can_error`
#6 [type_of] computing type of `can_error::{{opaque}}#0`
#7 [check_mod_item_types] checking item types in top-level module
#8 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0670`.

@matthiaskrgr matthiaskrgr 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 Aug 27, 2020
@matthiaskrgr
Copy link
Member Author

Likely caused by #72784

@jonas-schievink jonas-schievink added the A-async-await Area: Async & Await label Aug 27, 2020
@csmoe csmoe self-assigned this Aug 27, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this issue Aug 27, 2020
Should not apply field accessing on enum

Closes rust-lang#75977
But I'm surprised that `x.py test --stage 1` and CI didn't catch this with existing testcase.
r? @estebank
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this issue Aug 29, 2020
Should not apply field accessing on enum

Closes rust-lang#75977
But I'm surprised that `x.py test --stage 1` and CI didn't catch this with existing testcase.
r? @estebank
@bors bors closed this as completed in 65d071e Aug 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-async-await Area: Async & Await 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.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants