rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
98.02k stars 12.68k forks source link

ICE with GAT, TAIT + async{} when missing bound in the GAT. #90400

Closed Dirbaio closed 6 months ago

Dirbaio commented 2 years ago

Code

I think the cause is the code is incorrect: FooFuture should require where B: Bar. It doesn't, somehow the compiler doesn't catch this, and then ICEs at codegen if you try to use FooFuture<u32> because u32 is not Bar.

#![feature(generic_associated_types)]
#![feature(type_alias_impl_trait)]

use futures::executor::block_on;
use std::future::Future;

trait Bar {
    fn bar(&self);
}

trait Foo {
    type FooFuture<'a, B>: Future<Output = ()> + 'a
    where
        B: 'a,
        Self: 'a;

    fn foo<'a, B: Bar>(&'a self, bar: &'a B) -> Self::FooFuture<'_, B>;
}

struct MyFoo;

impl Foo for MyFoo {
    type FooFuture<'a, B>
    where
        B: 'a,
        Self: 'a,
    = impl Future<Output = ()> + 'a;

    fn foo<'a, B: Bar>(&'a self, bar: &'a B) -> Self::FooFuture<'_, B> {
        async move {
            bar.bar();
        }
    }
}

fn main() {
    let boom: <MyFoo as Foo>::FooFuture<'static, u32> = unsafe { core::mem::zeroed() };
    block_on(boom);
}

playground

Meta

rustc --version --verbose:

version: 1.58.0-nightly (2021-10-28 c390d69a615f095208ac)

Error output

error: internal compiler error: Encountered error `Unimplemented` selecting `Binder(<u32 as Bar>, [])` during codegen
Backtrace

``` Compiling playground v0.0.1 (/playground) thread 'rustc' panicked at 'called `Result::unwrap()` on an `Err` value: ErrorReported', compiler/rustc_monomorphize/src/collector.rs:894:84 stack backtrace: 0: rust_begin_unwind at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:495:5 1: core::panicking::panic_fmt at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/panicking.rs:106:14 2: core::result::unwrap_failed at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/result.rs:1617:5 3: rustc_monomorphize::collector::collect_neighbours 4: rustc_monomorphize::collector::collect_items_rec 5: rustc_monomorphize::collector::collect_items_rec 6: rustc_monomorphize::collector::collect_items_rec 7: rustc_monomorphize::collector::collect_items_rec 8: rustc_monomorphize::collector::collect_items_rec 9: rustc_monomorphize::collector::collect_items_rec 10: rustc_monomorphize::collector::collect_items_rec 11: rustc_monomorphize::collector::collect_items_rec 12: rustc_monomorphize::collector::collect_items_rec 13: ::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}> 14: rustc_monomorphize::collector::collect_crate_mono_items 15: rustc_monomorphize::partitioning::collect_and_partition_mono_items 16: rustc_query_system::query::plumbing::try_execute_query::>, &[rustc_middle::mir::mono::CodegenUnit])>> 17: rustc_query_system::query::plumbing::get_query:: 18: ::collect_and_partition_mono_items 19: rustc_codegen_ssa::base::codegen_crate:: 20: ::codegen_crate 21: ::time::, rustc_interface::passes::start_codegen::{closure#0}> 22: ::enter::<::ongoing_codegen::{closure#0}::{closure#0}, core::result::Result, rustc_errors::ErrorReported>> 23: ::ongoing_codegen 24: ::enter::, rustc_errors::ErrorReported>> 25: rustc_span::with_source_map::, rustc_interface::interface::create_compiler_and_run, rustc_driver::run_compiler::{closure#1}>::{closure#0}> 26: >::set::, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>> note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose 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.58.0-nightly (c390d69a6 2021-10-28) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: #0 [collect_and_partition_mono_items] collect_and_partition_mono_items end of query stack error: internal compiler error: Encountered error `Unimplemented` selecting `Binder(, [])` during codegen | = note: delayed at compiler/rustc_trait_selection/src/traits/codegen.rs:68:32 thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', compiler/rustc_errors/src/lib.rs:1167:13 stack backtrace: 0: 0x7f74068e076c - std::backtrace_rs::backtrace::libunwind::trace::hc6c3491277866fea at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5 1: 0x7f74068e076c - std::backtrace_rs::backtrace::trace_unsynchronized::h4524f073368a5b13 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x7f74068e076c - std::sys_common::backtrace::_print_fmt::h0d0cace6159902af at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:67:5 3: 0x7f74068e076c - ::fmt::h3e6af6f05919a7fc at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:46:22 4: 0x7f740693d9ac - core::fmt::write::h72801a82c94e6ff1 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/fmt/mod.rs:1149:17 5: 0x7f74068d0e95 - std::io::Write::write_fmt::ha4f5d34aaccbac84 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/io/mod.rs:1696:15 6: 0x7f74068e39c0 - std::sys_common::backtrace::_print::heed69f5ce9a8e189 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:49:5 7: 0x7f74068e39c0 - std::sys_common::backtrace::print::h5f3918bd80c09252 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:36:9 8: 0x7f74068e39c0 - std::panicking::default_hook::{{closure}}::h5af30648530eb3d0 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:210:50 9: 0x7f74068e356b - std::panicking::default_hook::he88d5fb1ba1b4c19 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:227:9 10: 0x7f7407077e31 - rustc_driver[98914a17e63058c]::DEFAULT_HOOK::{closure#0}::{closure#0} 11: 0x7f74068e41d9 - std::panicking::rust_panic_with_hook::h01febc308b2b313b at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:607:17 12: 0x7f74068e3c90 - std::panicking::begin_panic_handler::{{closure}}::h24a6d13f5560b71f at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:499:13 13: 0x7f74068e0c14 - std::sys_common::backtrace::__rust_end_short_backtrace::h3e2917f0da9fbc5c at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:139:18 14: 0x7f74068e3bf9 - rust_begin_unwind at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:495:5 15: 0x7f74068a9151 - core::panicking::panic_fmt::h7b8580d81fcbbacd at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/panicking.rs:106:14 16: 0x7f7408182bac - core[cc79c391059f8e46]::panicking::panic_display::<&str> 17: 0x7f7409866666 - ::flush_delayed 18: 0x7f7409864d7d - ::drop 19: 0x7f7408f4a346 - core[cc79c391059f8e46]::ptr::drop_in_place:: 20: 0x7f7408f4ca3a - as core[cc79c391059f8e46]::ops::drop::Drop>::drop 21: 0x7f7408f2786d - core[cc79c391059f8e46]::ptr::drop_in_place:: 22: 0x7f7408f276e5 - rustc_span[b6a32fa5db97fd22]::with_source_map::, rustc_interface[71a95cb40f833645]::interface::create_compiler_and_run, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}> 23: 0x7f7408f379c0 - >::set::, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>> 24: 0x7f7408f29a15 - std[fcea40badc263c8f]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>> 25: 0x7f7408f4c0a2 - <::spawn_unchecked, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#1} as core[cc79c391059f8e46]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} 26: 0x7f74068ef4c3 - as core::ops::function::FnOnce>::call_once::hd81bd86213781012 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/alloc/src/boxed.rs:1691:9 27: 0x7f74068ef4c3 - as core::ops::function::FnOnce>::call_once::h7b3e346f5d8f6d6a at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/alloc/src/boxed.rs:1691:9 28: 0x7f74068ef4c3 - std::sys::unix::thread::Thread::new::thread_start::ha575792f17151d60 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys/unix/thread.rs:106:17 29: 0x7f7406828609 - start_thread 30: 0x7f740673c293 - clone 31: 0x0 - 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.58.0-nightly (c390d69a6 2021-10-28) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack thread panicked while panicking. aborting. error: could not compile `playground` Caused by: process didn't exit successfully: `rustc --crate-name playground --edition=2021 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 -C metadata=b6855da70d22b117 -C extra-filename=-b6855da70d22b117 --out-dir /playground/target/debug/deps -L dependency=/playground/target/debug/deps --extern addr2line=/playground/target/debug/deps/libaddr2line-57dca319da409415.rlib --extern adler=/playground/target/debug/deps/libadler-ef7aea1c0a632ed5.rlib --extern adler32=/playground/target/debug/deps/libadler32-88b3d863e553f12a.rlib --extern ahash=/playground/target/debug/deps/libahash-3d30edb2f197bcc1.rlib --extern aho_corasick=/playground/target/debug/deps/libaho_corasick-6e6a6f34e39b3c51.rlib --extern ansi_term_0_11_0=/playground/target/debug/deps/libansi_term-f3162ca25925bbbc.rlib --extern ansi_term=/playground/target/debug/deps/libansi_term-2159b79c7c03c33b.rlib --extern anyhow=/playground/target/debug/deps/libanyhow-f163091ebea0bf6d.rlib --extern approx=/playground/target/debug/deps/libapprox-c000d63eea2962d7.rlib --extern arc_swap=/playground/target/debug/deps/libarc_swap-229c7223f9d117b5.rlib --extern arrayvec=/playground/target/debug/deps/libarrayvec-efd360c13d73e262.rlib --extern async_recursion=/playground/target/debug/deps/libasync_recursion-00c978b50853a1e6.so --extern async_trait=/playground/target/debug/deps/libasync_trait-efd1289ac06d9076.so --extern atty=/playground/target/debug/deps/libatty-f17150d767aa2aa3.rlib --extern autocfg=/playground/target/debug/deps/libautocfg-0fedd4b00cd8cfde.rlib --extern backtrace=/playground/target/debug/deps/libbacktrace-39b779627d7b6438.rlib --extern base64=/playground/target/debug/deps/libbase64-cfc95277467b3864.rlib --extern bit_set=/playground/target/debug/deps/libbit_set-3053369e5ab97a8d.rlib --extern bit_vec=/playground/target/debug/deps/libbit_vec-968c38f13f141e15.rlib --extern bitflags=/playground/target/debug/deps/libbitflags-de1f0b76046eea2a.rlib --extern block_buffer=/playground/target/debug/deps/libblock_buffer-846877a87c354fcf.rlib --extern bstr=/playground/target/debug/deps/libbstr-d6a5d9e9d210f367.rlib --extern bytemuck=/playground/target/debug/deps/libbytemuck-efd95db5ac0c94fd.rlib --extern byteorder=/playground/target/debug/deps/libbyteorder-36a6ae6c88126558.rlib --extern bytes=/playground/target/debug/deps/libbytes-6e05598c71bf2ce4.rlib --extern cc=/playground/target/debug/deps/libcc-d71044b8c9288a53.rlib --extern cfg_if_0_1_10=/playground/target/debug/deps/libcfg_if-8c3e31f5e1f73766.rlib --extern cfg_if=/playground/target/debug/deps/libcfg_if-5253e57569830399.rlib --extern chrono=/playground/target/debug/deps/libchrono-f7beda6352973108.rlib --extern clap=/playground/target/debug/deps/libclap-ca1dcbdf619d94f9.rlib --extern color_quant=/playground/target/debug/deps/libcolor_quant-aef1b2deff556d9b.rlib --extern cpufeatures=/playground/target/debug/deps/libcpufeatures-6819da34f82599f6.rlib --extern crc32fast=/playground/target/debug/deps/libcrc32fast-a9e117ef1f3013c4.rlib --extern crossbeam=/playground/target/debug/deps/libcrossbeam-46c056cf0c60e108.rlib --extern crossbeam_channel=/playground/target/debug/deps/libcrossbeam_channel-c9d352209ac8f9a7.rlib --extern crossbeam_deque=/playground/target/debug/deps/libcrossbeam_deque-28980e36bf93e302.rlib --extern crossbeam_epoch=/playground/target/debug/deps/libcrossbeam_epoch-5721f18695321e48.rlib --extern crossbeam_queue=/playground/target/debug/deps/libcrossbeam_queue-507eb457b9dce41a.rlib --extern crossbeam_utils=/playground/target/debug/deps/libcrossbeam_utils-0fcce16cf5c127a8.rlib --extern crypto_mac=/playground/target/debug/deps/libcrypto_mac-5fa871b1336b0ab5.rlib --extern csv=/playground/target/debug/deps/libcsv-6b47927e27964282.rlib --extern csv_core=/playground/target/debug/deps/libcsv_core-acfd2e4320e1929d.rlib --extern data_encoding=/playground/target/debug/deps/libdata_encoding-dc27914ccac23bde.rlib --extern deflate=/playground/target/debug/deps/libdeflate-c4cf0a1da32bbdfe.rlib --extern derivative=/playground/target/debug/deps/libderivative-2e4a3a7ebdaef485.so --extern digest=/playground/target/debug/deps/libdigest-52d8152835333097.rlib --extern dtoa=/playground/target/debug/deps/libdtoa-14adace6fe09bde6.rlib --extern either=/playground/target/debug/deps/libeither-9385b7aa28821a65.rlib --extern encoding_rs=/playground/target/debug/deps/libencoding_rs-1ec3e0f519f06d46.rlib --extern env_logger=/playground/target/debug/deps/libenv_logger-5eb2bc05984648ac.rlib --extern error_chain=/playground/target/debug/deps/liberror_chain-d5348c8e93d94eb5.rlib --extern fallible_iterator=/playground/target/debug/deps/libfallible_iterator-7f4fc8c0ad37dc9d.rlib --extern fallible_streaming_iterator=/playground/target/debug/deps/libfallible_streaming_iterator-baab7654e5e34d04.rlib --extern filetime=/playground/target/debug/deps/libfiletime-e74097b8ded3015e.rlib --extern fixedbitset=/playground/target/debug/deps/libfixedbitset-370e556d0894ebec.rlib --extern flate2=/playground/target/debug/deps/libflate2-cd0a98b8cae9d5a3.rlib --extern fnv=/playground/target/debug/deps/libfnv-0672b6da71ed834c.rlib --extern foreign_types=/playground/target/debug/deps/libforeign_types-e5d0ea207091f2ed.rlib --extern foreign_types_shared=/playground/target/debug/deps/libforeign_types_shared-e64cfaf7a202bcc7.rlib --extern form_urlencoded=/playground/target/debug/deps/libform_urlencoded-12649d381e2544ae.rlib --extern futf=/playground/target/debug/deps/libfutf-fd020dc4260f6dbc.rlib --extern futures=/playground/target/debug/deps/libfutures-95b115ebfc2f44e6.rlib --extern futures_channel=/playground/target/debug/deps/libfutures_channel-702a6f6976e9bcc0.rlib --extern futures_core=/playground/target/debug/deps/libfutures_core-75d7e22a3d1bb5e7.rlib --extern futures_executor=/playground/target/debug/deps/libfutures_executor-a7e5613311bed589.rlib --extern futures_io=/playground/target/debug/deps/libfutures_io-41cc2bb9ae5cef13.rlib --extern futures_macro=/playground/target/debug/deps/libfutures_macro-da5e9c66d0267bc0.so --extern futures_sink=/playground/target/debug/deps/libfutures_sink-6fb5decbb6946791.rlib --extern futures_task=/playground/target/debug/deps/libfutures_task-e5e4f8997fb01360.rlib --extern futures_util=/playground/target/debug/deps/libfutures_util-48f9072bdaa2408b.rlib --extern generic_array=/playground/target/debug/deps/libgeneric_array-62c7ba7923e0a29a.rlib --extern getrandom_0_1_16=/playground/target/debug/deps/libgetrandom-49270c78695591dc.rlib --extern getrandom=/playground/target/debug/deps/libgetrandom-162a0e4ad1faad1b.rlib --extern gif=/playground/target/debug/deps/libgif-12adc352504923ea.rlib --extern gimli=/playground/target/debug/deps/libgimli-5e4889693117544d.rlib --extern glob=/playground/target/debug/deps/libglob-3e188ae16859c506.rlib --extern h2=/playground/target/debug/deps/libh2-9c23b442ae761b5d.rlib --extern hashbrown=/playground/target/debug/deps/libhashbrown-b840595832d08a4e.rlib --extern hashlink=/playground/target/debug/deps/libhashlink-6d0e166c1a160dfb.rlib --extern hmac=/playground/target/debug/deps/libhmac-a8383305c7adb521.rlib --extern html5ever=/playground/target/debug/deps/libhtml5ever-716742fc75966143.rlib --extern http=/playground/target/debug/deps/libhttp-c8338e8f6e3f91cd.rlib --extern http_body=/playground/target/debug/deps/libhttp_body-60f2bdc933a1ba56.rlib --extern httparse=/playground/target/debug/deps/libhttparse-0343d302852bfd5e.rlib --extern httpdate=/playground/target/debug/deps/libhttpdate-6e276491cfbce091.rlib --extern humantime=/playground/target/debug/deps/libhumantime-bcb137373d337ec0.rlib --extern hyper=/playground/target/debug/deps/libhyper-07fabfdce552b153.rlib --extern hyper_tls=/playground/target/debug/deps/libhyper_tls-9debb15f13111139.rlib --extern idna=/playground/target/debug/deps/libidna-6e145051664b89cb.rlib --extern image=/playground/target/debug/deps/libimage-58f67b9b3e2c05f2.rlib --extern indexmap=/playground/target/debug/deps/libindexmap-5310563f7f6850ad.rlib --extern instant=/playground/target/debug/deps/libinstant-d90784ddfa07f1be.rlib --extern ipnet=/playground/target/debug/deps/libipnet-a2c6ce50b20fb70a.rlib --extern itertools=/playground/target/debug/deps/libitertools-bba2509b5d58e709.rlib --extern itoa=/playground/target/debug/deps/libitoa-bda856047fedd8f8.rlib --extern jpeg_decoder=/playground/target/debug/deps/libjpeg_decoder-db3167418b097b80.rlib --extern lazy_static=/playground/target/debug/deps/liblazy_static-56f839fc5f97cc86.rlib --extern libc=/playground/target/debug/deps/liblibc-d1d27f50857f1efa.rlib --extern libm=/playground/target/debug/deps/liblibm-d2c691ad80c63701.rlib --extern libsqlite3_sys=/playground/target/debug/deps/liblibsqlite3_sys-4cb47f89541895ad.rlib --extern linked_hash_map=/playground/target/debug/deps/liblinked_hash_map-f70128bcbd8de949.rlib --extern lock_api=/playground/target/debug/deps/liblock_api-255f2e32c833e7b4.rlib --extern log=/playground/target/debug/deps/liblog-3ea39f4e757cabdd.rlib --extern log_mdc=/playground/target/debug/deps/liblog_mdc-8c9acbf18051a6d8.rlib --extern log4rs=/playground/target/debug/deps/liblog4rs-7b7e3c939fcb83c8.rlib --extern mac=/playground/target/debug/deps/libmac-5ef46c35d1d60ae2.rlib --extern markup5ever=/playground/target/debug/deps/libmarkup5ever-f059e29d19a45779.rlib --extern markup5ever_rcdom=/playground/target/debug/deps/libmarkup5ever_rcdom-3c9b9ab254c8da1e.rlib --extern matches=/playground/target/debug/deps/libmatches-94fda48e5e4c1005.rlib --extern matrixmultiply=/playground/target/debug/deps/libmatrixmultiply-09291edd90c62dcf.rlib --extern md5=/playground/target/debug/deps/libmd5-c0aa51ce3101e278.rlib --extern memchr=/playground/target/debug/deps/libmemchr-f98afaac2b23200a.rlib --extern memmap=/playground/target/debug/deps/libmemmap-e6ea97f9d601ac71.rlib --extern memoffset=/playground/target/debug/deps/libmemoffset-60b4e53329a7a062.rlib --extern mime=/playground/target/debug/deps/libmime-be254843d53468a4.rlib --extern miniz_oxide_0_3_7=/playground/target/debug/deps/libminiz_oxide-3f0683298da28c4f.rlib --extern miniz_oxide=/playground/target/debug/deps/libminiz_oxide-81cef754e657418c.rlib --extern mio=/playground/target/debug/deps/libmio-57e52853790d364f.rlib --extern nalgebra=/playground/target/debug/deps/libnalgebra-d996ac283f68fb15.rlib --extern nalgebra_macros=/playground/target/debug/deps/libnalgebra_macros-412fb6199d6d15be.so --extern native_tls=/playground/target/debug/deps/libnative_tls-57fa1970daee9ada.rlib --extern ndarray=/playground/target/debug/deps/libndarray-1817433ddc21dccd.rlib --extern net2=/playground/target/debug/deps/libnet2-242099c78779cedc.rlib --extern debug_unreachable=/playground/target/debug/deps/libdebug_unreachable-cc7ea61f7b47b527.rlib --extern num=/playground/target/debug/deps/libnum-e15216aa8c9b7a81.rlib --extern num_bigint=/playground/target/debug/deps/libnum_bigint-b1fbca71da84cedc.rlib --extern num_complex=/playground/target/debug/deps/libnum_complex-5fda52ec23effa72.rlib --extern num_integer=/playground/target/debug/deps/libnum_integer-4fb07cf55679ae1c.rlib --extern num_iter=/playground/target/debug/deps/libnum_iter-30366f5bac5e9769.rlib --extern num_rational_0_3_2=/playground/target/debug/deps/libnum_rational-c5dbd12d7e084141.rlib --extern num_rational=/playground/target/debug/deps/libnum_rational-42eec01ba9e9a890.rlib --extern num_traits=/playground/target/debug/deps/libnum_traits-ef4eda907710cc53.rlib --extern num_cpus=/playground/target/debug/deps/libnum_cpus-aaac07d3b3fbc1e9.rlib --extern object=/playground/target/debug/deps/libobject-1c94ea32452080f1.rlib --extern once_cell=/playground/target/debug/deps/libonce_cell-4f625b5ea98dbe62.rlib --extern opaque_debug=/playground/target/debug/deps/libopaque_debug-ab9ddb0f69438328.rlib --extern openssl=/playground/target/debug/deps/libopenssl-2936af1860edd592.rlib --extern openssl_probe=/playground/target/debug/deps/libopenssl_probe-5bd5ed1fcf2f67f6.rlib --extern openssl_sys=/playground/target/debug/deps/libopenssl_sys-053fdf4fdd54be98.rlib --extern ordered_float=/playground/target/debug/deps/libordered_float-77d258dd8200b47b.rlib --extern parking_lot=/playground/target/debug/deps/libparking_lot-d8aa2f0ac4a3842a.rlib --extern parking_lot_core=/playground/target/debug/deps/libparking_lot_core-b1f2997fb6a89672.rlib --extern paste=/playground/target/debug/deps/libpaste-1d007800db85bb25.so --extern percent_encoding=/playground/target/debug/deps/libpercent_encoding-431c76c01be24719.rlib --extern pest=/playground/target/debug/deps/libpest-5b994c69f9e934e9.rlib --extern petgraph=/playground/target/debug/deps/libpetgraph-03bd9eee7d11521a.rlib --extern phf=/playground/target/debug/deps/libphf-9bf22a8a90b775a9.rlib --extern phf_codegen=/playground/target/debug/deps/libphf_codegen-4b45c34c58e52089.rlib --extern phf_generator=/playground/target/debug/deps/libphf_generator-3deeacda3e113d65.rlib --extern phf_shared=/playground/target/debug/deps/libphf_shared-6ba73acfa4648529.rlib --extern pin_project=/playground/target/debug/deps/libpin_project-ee5eaf075fa30ab4.rlib --extern pin_project_internal=/playground/target/debug/deps/libpin_project_internal-6f99149f74dc8ec6.so --extern pin_project_lite=/playground/target/debug/deps/libpin_project_lite-507f0ddc461ac52a.rlib --extern pin_utils=/playground/target/debug/deps/libpin_utils-b0bf3f0688139ba1.rlib --extern pkg_config=/playground/target/debug/deps/libpkg_config-b9f036c91b0208e1.rlib --extern png=/playground/target/debug/deps/libpng-64f9599129298a59.rlib --extern postgres=/playground/target/debug/deps/libpostgres-38a9f11ce1d1df52.rlib --extern postgres_protocol=/playground/target/debug/deps/libpostgres_protocol-d749f7b21bb9e752.rlib --extern postgres_types=/playground/target/debug/deps/libpostgres_types-842540de150c21ef.rlib --extern ppv_lite86=/playground/target/debug/deps/libppv_lite86-b67f90ab267192fa.rlib --extern precomputed_hash=/playground/target/debug/deps/libprecomputed_hash-1298520f088678de.rlib --extern proc_macro_hack=/playground/target/debug/deps/libproc_macro_hack-91e0b1e0fa231bd6.so --extern proc_macro_nested=/playground/target/debug/deps/libproc_macro_nested-9a323edbb9ceaf9f.rlib --extern proc_macro2=/playground/target/debug/deps/libproc_macro2-80d66eaf413cd876.rlib --extern quick_error=/playground/target/debug/deps/libquick_error-65732850c28200f7.rlib --extern quote=/playground/target/debug/deps/libquote-3a7cff164be059f6.rlib --extern rand_0_7_3=/playground/target/debug/deps/librand-6949f331e9893845.rlib --extern rand=/playground/target/debug/deps/librand-0d4b189e2adce2c4.rlib --extern rand_chacha_0_2_2=/playground/target/debug/deps/librand_chacha-8ad52d5c6e548dc3.rlib --extern rand_chacha=/playground/target/debug/deps/librand_chacha-a4745d17f9d6b003.rlib --extern rand_core_0_5_1=/playground/target/debug/deps/librand_core-33a9f1b6b12702f1.rlib --extern rand_core=/playground/target/debug/deps/librand_core-c3d55faba6c71991.rlib --extern rand_distr=/playground/target/debug/deps/librand_distr-bd5826dc2e592b8a.rlib --extern rand_hc=/playground/target/debug/deps/librand_hc-c6e70507d41d212a.rlib --extern rand_pcg=/playground/target/debug/deps/librand_pcg-020af5cf5ddca123.rlib --extern rawpointer=/playground/target/debug/deps/librawpointer-63eb1bba55566369.rlib --extern rayon=/playground/target/debug/deps/librayon-6f1c65b5778248ee.rlib --extern rayon_core=/playground/target/debug/deps/librayon_core-6f91bbcee2a454eb.rlib --extern regex=/playground/target/debug/deps/libregex-e7f680424f0e5892.rlib --extern regex_automata=/playground/target/debug/deps/libregex_automata-6c0118ae8f4b0501.rlib --extern regex_syntax=/playground/target/debug/deps/libregex_syntax-bf3087c853715238.rlib --extern remove_dir_all=/playground/target/debug/deps/libremove_dir_all-6db8331ec1c4e72f.rlib --extern reqwest=/playground/target/debug/deps/libreqwest-3583b1cb6e80e0be.rlib --extern ring=/playground/target/debug/deps/libring-9243fda75334b245.rlib --extern rusqlite=/playground/target/debug/deps/librusqlite-604a3d73261a9a52.rlib --extern rustc_demangle=/playground/target/debug/deps/librustc_demangle-57fef8ec284fa01a.rlib --extern rustc_version=/playground/target/debug/deps/librustc_version-7ff528eab49435cb.rlib --extern ryu=/playground/target/debug/deps/libryu-bdb837b197ad7926.rlib --extern safe_arch=/playground/target/debug/deps/libsafe_arch-f3da7a44a0c398d1.rlib --extern same_file=/playground/target/debug/deps/libsame_file-7a3f353776f43cdd.rlib --extern scoped_threadpool=/playground/target/debug/deps/libscoped_threadpool-14c0b9d1ec39c6a3.rlib --extern scopeguard=/playground/target/debug/deps/libscopeguard-866386222a022128.rlib --extern select=/playground/target/debug/deps/libselect-de69bf2acb45db77.rlib --extern semver=/playground/target/debug/deps/libsemver-cdd44e1024de9a25.rlib --extern semver_parser=/playground/target/debug/deps/libsemver_parser-fa22a77381d4b647.rlib --extern serde=/playground/target/debug/deps/libserde-bf0c271f1c26f688.rlib --extern serde_value=/playground/target/debug/deps/libserde_value-50ca64038b6d607c.rlib --extern serde_derive=/playground/target/debug/deps/libserde_derive-ac0d65ece1f3bf91.so --extern serde_json=/playground/target/debug/deps/libserde_json-3e8036ba26686e80.rlib --extern serde_urlencoded=/playground/target/debug/deps/libserde_urlencoded-2c1fd409f0296601.rlib --extern serde_yaml=/playground/target/debug/deps/libserde_yaml-e22425e8650351ee.rlib --extern sha2=/playground/target/debug/deps/libsha2-6422266105f55615.rlib --extern simba=/playground/target/debug/deps/libsimba-dd2eb3b8adb7e823.rlib --extern siphasher=/playground/target/debug/deps/libsiphasher-b6df8905083949f8.rlib --extern slab=/playground/target/debug/deps/libslab-a613e78273e2994c.rlib --extern smallvec=/playground/target/debug/deps/libsmallvec-babc01fe749f5dc1.rlib --extern smawk=/playground/target/debug/deps/libsmawk-6ed7cfb7fa793e0c.rlib --extern socket2=/playground/target/debug/deps/libsocket2-a623f7013fd42b7c.rlib --extern spin=/playground/target/debug/deps/libspin-4d2c7b2ce1e7d317.rlib --extern string_cache=/playground/target/debug/deps/libstring_cache-967cc4709c36c415.rlib --extern string_cache_codegen=/playground/target/debug/deps/libstring_cache_codegen-1929c6bb3a71a3e2.rlib --extern stringprep=/playground/target/debug/deps/libstringprep-a2cd177617066afe.rlib --extern strsim_0_8_0=/playground/target/debug/deps/libstrsim-de24b5a82a358084.rlib --extern strsim=/playground/target/debug/deps/libstrsim-f8a23f77c73daaa0.rlib --extern subtle=/playground/target/debug/deps/libsubtle-e4d742d62e753012.rlib --extern syn=/playground/target/debug/deps/libsyn-171c29c041c8ddff.rlib --extern tar=/playground/target/debug/deps/libtar-00272b183f869d57.rlib --extern tempfile=/playground/target/debug/deps/libtempfile-0a37bd82d6cd9d9b.rlib --extern tendril=/playground/target/debug/deps/libtendril-0f1e7e0ad92436f6.rlib --extern termcolor=/playground/target/debug/deps/libtermcolor-ac34df5ab449410c.rlib --extern textwrap_0_11_0=/playground/target/debug/deps/libtextwrap-a1244e561e912773.rlib --extern textwrap=/playground/target/debug/deps/libtextwrap-3fe247f3ade8a176.rlib --extern thiserror=/playground/target/debug/deps/libthiserror-4df27ea74a4c44cb.rlib --extern thiserror_impl=/playground/target/debug/deps/libthiserror_impl-17323ab4fbb03087.so --extern thread_id=/playground/target/debug/deps/libthread_id-5af57dee44a9e5b5.rlib --extern thread_local=/playground/target/debug/deps/libthread_local-ff6c52c3d6835455.rlib --extern threadpool=/playground/target/debug/deps/libthreadpool-4f79d8209f0a1deb.rlib --extern tiff=/playground/target/debug/deps/libtiff-1502d689e2206828.rlib --extern time_0_1_44=/playground/target/debug/deps/libtime-58c8b2f7324be800.rlib --extern time=/playground/target/debug/deps/libtime-1a06cb39e8a413f4.rlib --extern tinyvec=/playground/target/debug/deps/libtinyvec-41ae46c02ad7d836.rlib --extern tinyvec_macros=/playground/target/debug/deps/libtinyvec_macros-8f36f65da14d810a.rlib --extern tokio=/playground/target/debug/deps/libtokio-c2dc62c50952c91b.rlib --extern tokio_native_tls=/playground/target/debug/deps/libtokio_native_tls-914e02f50a83d882.rlib --extern tokio_postgres=/playground/target/debug/deps/libtokio_postgres-9b8fe8eb4c7e0fbb.rlib --extern tokio_util=/playground/target/debug/deps/libtokio_util-2ef05af878ffc864.rlib --extern toml=/playground/target/debug/deps/libtoml-022f9a9d5d3b5d1e.rlib --extern tower_service=/playground/target/debug/deps/libtower_service-c041688e0e20bd6a.rlib --extern tracing=/playground/target/debug/deps/libtracing-a413000bee2602be.rlib --extern tracing_core=/playground/target/debug/deps/libtracing_core-02da3ee34dc0460e.rlib --extern traitobject=/playground/target/debug/deps/libtraitobject-ac408b27f7e01f65.rlib --extern try_lock=/playground/target/debug/deps/libtry_lock-849bac2fba98b76b.rlib --extern typemap=/playground/target/debug/deps/libtypemap-0e4274a17e401313.rlib --extern typenum=/playground/target/debug/deps/libtypenum-ac7db95e6f79cdd3.rlib --extern ucd_trie=/playground/target/debug/deps/libucd_trie-93387f8d9b9d3865.rlib --extern unicase=/playground/target/debug/deps/libunicase-5f5e7ca06c6ec24d.rlib --extern unicode_bidi=/playground/target/debug/deps/libunicode_bidi-6b3996bc223fd7fa.rlib --extern unicode_linebreak=/playground/target/debug/deps/libunicode_linebreak-fd5a1dd624037406.rlib --extern unicode_normalization=/playground/target/debug/deps/libunicode_normalization-6682d8efcc006850.rlib --extern unicode_segmentation=/playground/target/debug/deps/libunicode_segmentation-84fad06bf49b6f83.rlib --extern unicode_width=/playground/target/debug/deps/libunicode_width-89b03b59aa6daeee.rlib --extern unicode_xid=/playground/target/debug/deps/libunicode_xid-e62049c489d25ae7.rlib --extern unsafe_any=/playground/target/debug/deps/libunsafe_any-843b450d6d60d480.rlib --extern untrusted=/playground/target/debug/deps/libuntrusted-ecc06c34234b2716.rlib --extern url=/playground/target/debug/deps/liburl-4d1789bc1b432d93.rlib --extern utf8=/playground/target/debug/deps/libutf8-8dc7fb5a31151cba.rlib --extern vec_map=/playground/target/debug/deps/libvec_map-d4f07e9e0554b315.rlib --extern version_check=/playground/target/debug/deps/libversion_check-0914641c3c545b20.rlib --extern walkdir=/playground/target/debug/deps/libwalkdir-5f8042bccd6ce967.rlib --extern want=/playground/target/debug/deps/libwant-c87cf57b9785a1a3.rlib --extern weezl=/playground/target/debug/deps/libweezl-d16c0a64cf685d9c.rlib --extern wide=/playground/target/debug/deps/libwide-19b532deb18b9409.rlib --extern winapi=/playground/target/debug/deps/libwinapi-816acb549345e22d.rlib --extern xattr=/playground/target/debug/deps/libxattr-95408f9a26b8f42a.rlib --extern xml5ever=/playground/target/debug/deps/libxml5ever-3d48d435b90efb74.rlib --extern yaml_rust=/playground/target/debug/deps/libyaml_rust-4b0c1291d8cc95ca.rlib -L native=/playground/target/debug/build/libsqlite3-sys-cfd0717c619c8d26/out -L native=/playground/target/debug/build/ring-63ec69c22291d426/out` (signal: 4, SIGILL: illegal instruction) ```

jackh726 commented 2 years ago

Interesting.

So, the problem here is that the type of FooFuture has some bounds that are required for that type to be constructed (namely B: Bar), but we end up "getting" a variable with that type without satisfying that. Here through zeroed, but can also be done through a function with a todo!() body.

SNCPlay42 commented 2 years ago

Update: the below examples are no longer ICEs.

Some "reductions" that should have the same root cause as described above, although they error slightly differently (they all produce some kind of complaint that u32 is not Bar):

Using closures instead of async:

#![feature(generic_associated_types)]
#![feature(type_alias_impl_trait)]

trait Bar {
    fn bar(&self);
}

trait Foo {
    type FooFn<B>: FnOnce();

    fn foo<B: Bar>(&self, bar: B) -> Self::FooFn<B>;
}

struct MyFoo;

impl Foo for MyFoo {
    type FooFn<B> = impl FnOnce();

    fn foo<B: Bar>(&self, bar: B) -> Self::FooFn<B> {
        move || { bar.bar() }
    }
}

fn main() {
    let boom: <MyFoo as Foo>::FooFn<u32> = unsafe { core::mem::zeroed() };
    boom();
}
Output ``` thread 'rustc' panicked at 'called `Result::unwrap()` on an `Err` value: ErrorReported', compiler/rustc_monomorphize/src/collector.rs:894:84 stack backtrace: 0: rust_begin_unwind at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:495:5 1: core::panicking::panic_fmt at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/panicking.rs:106:14 2: core::result::unwrap_failed at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/result.rs:1617:5 3: rustc_monomorphize::collector::collect_neighbours 4: rustc_monomorphize::collector::collect_items_rec 5: rustc_monomorphize::collector::collect_items_rec 6: ::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}> 7: rustc_monomorphize::collector::collect_crate_mono_items 8: rustc_monomorphize::partitioning::collect_and_partition_mono_items 9: rustc_query_system::query::plumbing::try_execute_query::>, &[rustc_middle::mir::mono::CodegenUnit])>> 10: rustc_query_system::query::plumbing::get_query:: 11: ::collect_and_partition_mono_items 12: rustc_codegen_ssa::base::codegen_crate:: 13: ::codegen_crate 14: ::time::, rustc_interface::passes::start_codegen::{closure#0}> 15: ::enter::<::ongoing_codegen::{closure#0}::{closure#0}, core::result::Result, rustc_errors::ErrorReported>> 16: ::ongoing_codegen 17: ::enter::, rustc_errors::ErrorReported>> 18: rustc_span::with_source_map::, rustc_interface::interface::create_compiler_and_run, rustc_driver::run_compiler::{closure#1}>::{closure#0}> 19: >::set::, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>> note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose 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.58.0-nightly (c390d69a6 2021-10-28) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: #0 [collect_and_partition_mono_items] collect_and_partition_mono_items end of query stack error: internal compiler error: Encountered error `Unimplemented` selecting `Binder(, [])` during codegen | = note: delayed at compiler/rustc_trait_selection/src/traits/codegen.rs:68:32 thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', compiler/rustc_errors/src/lib.rs:1167:13 stack backtrace: 0: 0x7f8aec4c076c - std::backtrace_rs::backtrace::libunwind::trace::hc6c3491277866fea at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5 1: 0x7f8aec4c076c - std::backtrace_rs::backtrace::trace_unsynchronized::h4524f073368a5b13 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x7f8aec4c076c - std::sys_common::backtrace::_print_fmt::h0d0cace6159902af at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:67:5 3: 0x7f8aec4c076c - ::fmt::h3e6af6f05919a7fc at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:46:22 4: 0x7f8aec51d9ac - core::fmt::write::h72801a82c94e6ff1 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/fmt/mod.rs:1149:17 5: 0x7f8aec4b0e95 - std::io::Write::write_fmt::ha4f5d34aaccbac84 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/io/mod.rs:1696:15 6: 0x7f8aec4c39c0 - std::sys_common::backtrace::_print::heed69f5ce9a8e189 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:49:5 7: 0x7f8aec4c39c0 - std::sys_common::backtrace::print::h5f3918bd80c09252 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:36:9 8: 0x7f8aec4c39c0 - std::panicking::default_hook::{{closure}}::h5af30648530eb3d0 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:210:50 9: 0x7f8aec4c356b - std::panicking::default_hook::he88d5fb1ba1b4c19 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:227:9 10: 0x7f8aecc57e31 - rustc_driver[98914a17e63058c]::DEFAULT_HOOK::{closure#0}::{closure#0} 11: 0x7f8aec4c41d9 - std::panicking::rust_panic_with_hook::h01febc308b2b313b at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:607:17 12: 0x7f8aec4c3c90 - std::panicking::begin_panic_handler::{{closure}}::h24a6d13f5560b71f at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:499:13 13: 0x7f8aec4c0c14 - std::sys_common::backtrace::__rust_end_short_backtrace::h3e2917f0da9fbc5c at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys_common/backtrace.rs:139:18 14: 0x7f8aec4c3bf9 - rust_begin_unwind at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:495:5 15: 0x7f8aec489151 - core::panicking::panic_fmt::h7b8580d81fcbbacd at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/panicking.rs:106:14 16: 0x7f8aedd62bac - core[cc79c391059f8e46]::panicking::panic_display::<&str> 17: 0x7f8aef446666 - ::flush_delayed 18: 0x7f8aef444d7d - ::drop 19: 0x7f8aeeb2a346 - core[cc79c391059f8e46]::ptr::drop_in_place:: 20: 0x7f8aeeb2ca3a - as core[cc79c391059f8e46]::ops::drop::Drop>::drop 21: 0x7f8aeeb0786d - core[cc79c391059f8e46]::ptr::drop_in_place:: 22: 0x7f8aeeb076e5 - rustc_span[b6a32fa5db97fd22]::with_source_map::, rustc_interface[71a95cb40f833645]::interface::create_compiler_and_run, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}> 23: 0x7f8aeeb179c0 - >::set::, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>> 24: 0x7f8aeeb09a15 - std[fcea40badc263c8f]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>> 25: 0x7f8aeeb2c0a2 - <::spawn_unchecked, rustc_driver[98914a17e63058c]::run_compiler::{closure#1}>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#0}, core[cc79c391059f8e46]::result::Result<(), rustc_errors[932abaefb61eb634]::ErrorReported>>::{closure#1} as core[cc79c391059f8e46]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} 26: 0x7f8aec4cf4c3 - as core::ops::function::FnOnce>::call_once::hd81bd86213781012 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/alloc/src/boxed.rs:1691:9 27: 0x7f8aec4cf4c3 - as core::ops::function::FnOnce>::call_once::h7b3e346f5d8f6d6a at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/alloc/src/boxed.rs:1691:9 28: 0x7f8aec4cf4c3 - std::sys::unix::thread::Thread::new::thread_start::ha575792f17151d60 at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/sys/unix/thread.rs:106:17 29: 0x7f8aec408609 - start_thread 30: 0x7f8aec31c293 - clone 31: 0x0 - 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.58.0-nightly (c390d69a6 2021-10-28) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack thread panicked while panicking. aborting. ```

Using a custom trait instead of Future/FnOnce:

#![feature(generic_associated_types)]
#![feature(type_alias_impl_trait)]

trait Bar {
    fn bar(&self);
}

trait Baz {
    fn baz(&self);
}

trait Foo {
    type FooFn<B>: Baz;

    fn foo<B: Bar>(&self, bar: B) -> Self::FooFn<B>;
}

struct MyFoo;
impl Foo for MyFoo {
    type FooFn<B> = impl Baz;

    fn foo<B: Bar>(&self, bar: B) -> Self::FooFn<B> {
        MyBaz(bar)
    }
}

struct MyBaz<B: Bar>(B);
impl <B: Bar> Baz for MyBaz<B> {
    fn baz(&self) {}
}

fn main() {
    let boom: <MyFoo as Foo>::FooFn<u32> = unsafe { core::mem::zeroed() };
    boom.baz();
}
Output ``` error: internal compiler error: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(, polarity:Positive), []), depth=1),Unimplemented)]` resolving bounds after type-checking | = note: delayed at compiler/rustc_trait_selection/src/traits/codegen.rs:124:24 thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', compiler/rustc_errors/src/lib.rs:1167:13 stack backtrace: 0: rust_begin_unwind at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/std/src/panicking.rs:495:5 1: core::panicking::panic_fmt at /rustc/c390d69a615f095208ac94841f3310268521b2ee/library/core/src/panicking.rs:106:14 2: core::panicking::panic_display::<&str> 3: ::flush_delayed 4: ::drop 5: core::ptr::drop_in_place:: 6: as core::ops::drop::Drop>::drop 7: core::ptr::drop_in_place:: 8: rustc_span::with_source_map::, rustc_interface::interface::create_compiler_and_run, rustc_driver::run_compiler::{closure#1}>::{closure#0}> 9: >::set::, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorReported>> note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose 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.58.0-nightly (c390d69a6 2021-10-28) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack ```
SNCPlay42 commented 2 years ago

If you use a non-associated type alias instead of a GAT, the async and FnOnce versions still ICE but the custom trait version doesn't. See #90409

jackh726 commented 2 years ago

GATs issue triage: not blocking. Given that there are similar repros without GATs, this basically confirms my suspicion that this isn't a GAT issue, but a TAIT one.

Alexendoo commented 2 years ago

The custom trait version no longer ICEs since #90948, the rest still do

JohnTitor commented 2 years ago

Triage: All the examples on the comment (https://github.com/rust-lang/rust/issues/90400#issuecomment-954927836) are no longer ICE, I'm going to mark as E-needs-test.

JohnTitor commented 2 years ago

Triage: the original code still triggers an ICE. In https://github.com/rust-lang/rust/pull/97309, I've added some tests based on https://github.com/rust-lang/rust/issues/90400#issuecomment-954927836. Unmarking this as E-needs-test and marking as E-needs-mcve, so that we can include the original's to glacier.

oli-obk commented 2 years ago

The original doesn't ICE anymore on playground, it reports a few errors, but fixing them produces no ICEs at any stage

matthiaskrgr commented 6 months ago

any reason why this is not closed yet? we do have tests for this inside rustc