pnkfelix: here is the reduced test case (play):
#![feature(associated_type_defaults)]
trait MyDisplay { fn method(&self) { } }
impl<'a, T: MyDisplay> MyDisplay for &'a mut T { }
struct T;
trait MPU {
type MpuConfig: MyDisplay = T;
}
struct S;
impl MPU for S { }
trait MyWrite {
fn my_write(&self, _: &dyn MyDisplay) { }
}
trait ProcessType {
fn process_detail_fmt(&self, _: &mut dyn MyWrite);
}
struct Process;
impl ProcessType for Process {
fn process_detail_fmt(&self, writer: &mut dyn MyWrite)
{
let mut val: Option<<S as MPU>::MpuConfig> = None;
let valref: &mut <S as MPU>::MpuConfig = val.as_mut().unwrap();
// // This causes a different ICE (but its similar if you squint right):
// //
// // `Unimplemented` selecting `Binder(<T as MyDisplay>)` during codegen
//
// writer.my_write(valref)
// This one causes the ICE:
// FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<T as MyDisplay>)), depth=1),Unimplemented)
let closure = |config: &mut <S as MPU>::MpuConfig| writer.my_write(&config);
closure(valref);
}
}
fn create() -> &'static dyn ProcessType {
let input: Option<&mut Process> = None;
let process: &mut Process = input.unwrap();
process
}
pub fn main() {
create();
}
(Sadly I have not been able to reduce it further. But this should serve us well enough.)
Original bug report follows:
I'm getting a compiler error when trying to compile:
impl fmt::Display for PMPConfig {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
Ok(())
}
}
I'm compiling for the riscv32imac-unknown-none-elf target.
Full branch here:
https://github.com/tock/tock/blob/f29f8aa9bf9925893e905feb1aa42db2ce57d36f/arch/rv32i/src/pmp.rs#L26
error: internal compiler error: src/librustc/traits/codegen/mod.rs:127: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<() as core::fmt::Display>)), depth=1),Unimplemented)]` resolving bounds after type-checking
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:925:9
stack backtrace:
0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
1: core::fmt::write
2: std::io::Write::write_fmt
3: std::panicking::default_hook::{{closure}}
4: std::panicking::default_hook
5: rustc_driver::report_ice
6: std::panicking::rust_panic_with_hook
7: std::panicking::begin_panic
8: rustc_errors::HandlerInner::bug
9: rustc_errors::Handler::bug
10: rustc::util::bug::opt_span_bug_fmt::{{closure}}
11: rustc::ty::context::tls::with_opt::{{closure}}
12: rustc::ty::context::tls::with_context_opt
13: rustc::ty::context::tls::with_opt
14: rustc::util::bug::opt_span_bug_fmt
15: rustc::util::bug::bug_fmt
16: rustc::traits::codegen::<impl rustc::infer::InferCtxt>::drain_fulfillment_cx_or_panic
17: rustc::ty::context::GlobalCtxt::enter_local
18: rustc::traits::codegen::codegen_fulfill_obligation
19: rustc::ty::query::__query_compute::codegen_fulfill_obligation
20: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::codegen_fulfill_obligation>::compute
21: rustc::dep_graph::graph::DepGraph::with_task_impl
22: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
23: rustc::ty::instance::Instance::resolve
24: rustc::ty::instance::Instance::resolve_for_fn_ptr
25: <rustc_mir::monomorphize::collector::MirNeighborCollector as rustc::mir::visit::Visitor>::visit_rvalue
26: rustc_mir::monomorphize::collector::collect_items_rec
27: rustc_mir::monomorphize::collector::collect_items_rec
28: rustc_mir::monomorphize::collector::collect_items_rec
29: rustc_mir::monomorphize::collector::collect_items_rec
30: rustc_mir::monomorphize::collector::collect_items_rec
31: rustc_mir::monomorphize::collector::collect_items_rec
32: rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}
33: rustc::util::common::time
34: rustc_mir::monomorphize::collector::collect_crate_mono_items
35: rustc::util::common::time
36: rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items
37: rustc::ty::query::__query_compute::collect_and_partition_mono_items
38: rustc::dep_graph::graph::DepGraph::with_task_impl
39: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
40: rustc_codegen_ssa::base::codegen_crate
41: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_utils::codegen_backend::CodegenBackend>::codegen_crate
42: rustc_interface::passes::start_codegen::{{closure}}
43: rustc::util::common::time
44: rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}
45: rustc_interface::passes::create_global_ctxt::{{closure}}
46: rustc_interface::queries::Query<T>::compute
47: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::ongoing_codegen
48: rustc_interface::interface::run_compiler_in_existing_thread_pool
49: std::thread::local::LocalKey<T>::with
50: scoped_tls::ScopedKey<T>::set
51: syntax::with_globals
or with full backtrace:
error: internal compiler error: src/librustc/traits/codegen/mod.rs:127: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<() as core::fmt::Display>)), depth=1),Unimplemented)]` resolving bounds after type-checking
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:925:9
stack backtrace:
0: 0x107ee4765 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc92d616cef8f0450
1: 0x107f1afe0 - core::fmt::write::h716de5060e2e2331
2: 0x107ed7eab - std::io::Write::write_fmt::hcf7751f7cc575a83
3: 0x107ee8ac3 - std::panicking::default_hook::{{closure}}::hcbef2dce5efa48e4
4: 0x107ee87da - std::panicking::default_hook::h8d36105439fe91d2
5: 0x10886f852 - rustc_driver::report_ice::hfa643614a34e50c3
6: 0x107ee9302 - std::panicking::rust_panic_with_hook::h66761634aad950e8
7: 0x10a3f0631 - std::panicking::begin_panic::h34e760fb9453ebea
8: 0x10a3ed727 - rustc_errors::HandlerInner::bug::h6632965e0eab1113
9: 0x10a3ec3bd - rustc_errors::Handler::bug::hcfa8e791cebcb41f
10: 0x109b82ebb - rustc::util::bug::opt_span_bug_fmt::{{closure}}::h1f12cbc5d5c9e30d
11: 0x109b81fc6 - rustc::ty::context::tls::with_opt::{{closure}}::h3c1d0ef67ec726db
12: 0x109b81f54 - rustc::ty::context::tls::with_context_opt::h0bc959fbaa3c960b
13: 0x109b81f82 - rustc::ty::context::tls::with_opt::h5b98f20d68bd6455
14: 0x109b82dd8 - rustc::util::bug::opt_span_bug_fmt::h4b691449484f2e2d
15: 0x109b82d2b - rustc::util::bug::bug_fmt::h94ea7325307137cb
16: 0x109bee1de - rustc::traits::codegen::<impl rustc::infer::InferCtxt>::drain_fulfillment_cx_or_panic::haf0249c10c545ad4
17: 0x10a085320 - rustc::ty::context::GlobalCtxt::enter_local::hc3ed889af372304b
18: 0x109de43a6 - rustc::traits::codegen::codegen_fulfill_obligation::h2083639e26b40870
19: 0x109ada6ca - rustc::ty::query::__query_compute::codegen_fulfill_obligation::h47add3629ad3c7c9
20: 0x10a090f30 - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::codegen_fulfill_obligation>::compute::h367720f4ad252193
21: 0x109b25685 - rustc::dep_graph::graph::DepGraph::with_task_impl::hdb658fea3c8e03a0
22: 0x109f73e7e - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::hc4e638aed84e9309
23: 0x109a4ee08 - rustc::ty::instance::Instance::resolve::h7f14c4b030d04908
24: 0x109a4f40a - rustc::ty::instance::Instance::resolve_for_fn_ptr::hd3f49848b140835f
25: 0x109304298 - <rustc_mir::monomorphize::collector::MirNeighborCollector as rustc::mir::visit::Visitor>::visit_rvalue::hc49ddd5adf94cfe8
26: 0x109302eb7 - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
27: 0x1093038cf - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
28: 0x1093038cf - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
29: 0x1093038cf - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
30: 0x1093038cf - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
31: 0x1093038cf - rustc_mir::monomorphize::collector::collect_items_rec::h2f0cd94f91ffd624
32: 0x109174c1e - rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}::h4b9955786c837751
33: 0x10913f7d3 - rustc::util::common::time::h7f14ec4a929068d5
34: 0x109301530 - rustc_mir::monomorphize::collector::collect_crate_mono_items::hb405aac8f6d07af3
35: 0x10913f8f8 - rustc::util::common::time::hbfb52e7fe607ac6c
36: 0x10940bfba - rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items::h9dba4196ae508ffb
37: 0x10b65bad2 - rustc::ty::query::__query_compute::collect_and_partition_mono_items::h7b08395218e7aba3
38: 0x10b6706fa - rustc::dep_graph::graph::DepGraph::with_task_impl::h25d923dce7eb1416
39: 0x10b7236af - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h9078560050296908
40: 0x10b73eedd - rustc_codegen_ssa::base::codegen_crate::hef4e5fc37e1a7a0e
41: 0x10b6e0b49 - <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_utils::codegen_backend::CodegenBackend>::codegen_crate::ha5087cf525770987
42: 0x10893605e - rustc_interface::passes::start_codegen::{{closure}}::h63426f234991945a
43: 0x108931068 - rustc::util::common::time::h9caa4ccff6ec0bfb
44: 0x10890b16f - rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}::ha08746ee0b93b578
45: 0x10893529b - rustc_interface::passes::create_global_ctxt::{{closure}}::h600047dc314d4bba
46: 0x108907399 - rustc_interface::queries::Query<T>::compute::h9cd0fdded8634953
47: 0x10899f19c - rustc_interface::queries::<impl rustc_interface::interface::Compiler>::ongoing_codegen::h51958e05ed750756
48: 0x108874d25 - rustc_interface::interface::run_compiler_in_existing_thread_pool::haa58e61254d8def5
49: 0x1088877e4 - std::thread::local::LocalKey<T>::with::h702dc95be888a0e1
50: 0x1088719a2 - scoped_tls::ScopedKey<T>::set::hb39b6f973e4a5679
51: 0x1088a22d5 - syntax::with_globals::h58d861cb85a086c0
52: 0x1088a6e37 - std::sys_common::backtrace::__rust_begin_short_backtrace::hdf8e7185d0994576
53: 0x107ef84af - __rust_maybe_catch_panic
54: 0x1088b0f17 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h7bb4ccc9b14ced04
55: 0x107eca6ce - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h87e32ddb36700069
56: 0x107ef72be - std::sys::unix::thread::Thread::new::thread_start::h20e18e6fa0d2566a
57: 0x7fff744f62eb - _pthread_body
58: 0x7fff744f9249 - _pthread_start
and more debug output on my build:
*******************************************************
TOCK KERNEL BUILD SYSTEM -- VERBOSE BUILD CONFIGURATION
*******************************************************
PLATFORM = arty-e21
TARGET = riscv32imac-unknown-none-elf
TOCK_KERNEL_VERSION = release-1.4-61-g4c6b652c6
RUSTFLAGS_FOR_CARGO = -C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512
MAKEFLAGS = -r -R
OBJDUMP_FLAGS = --disassemble-all --source --section-headers
TOOLCHAIN = "/Users/bradjc/.rustup/toolchains/nightly-2019-10-17-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/bin/llvm"
SIZE = "/Users/bradjc/.rustup/toolchains/nightly-2019-10-17-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/bin/llvm"-size
OBJCOPY = "/Users/bradjc/.rustup/toolchains/nightly-2019-10-17-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/bin/llvm"-objcopy
OBJDUMP = "/Users/bradjc/.rustup/toolchains/nightly-2019-10-17-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/bin/llvm"-objdump
CARGO = cargo
RUSTUP = rustup
cargo --version = cargo 1.40.0-nightly (3a9abe3f0 2019-10-15)
rustc --version = rustc 1.40.0-nightly (0e8a4b441 2019-10-16)
rustup --version = rustup 1.20.2 (13979c968 2019-10-16)
*******************************************************
RUSTFLAGS="-C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512" cargo build --target=riscv32imac-unknown-none-elf --verbose --release
Fresh tock-registers v0.3.0 (/Users/bradjc/git/tock/libraries/tock-register-interface)
Fresh tock-cells v0.1.0 (/Users/bradjc/git/tock/libraries/tock-cells)
Fresh tock_rt0 v0.1.0 (/Users/bradjc/git/tock/libraries/tock-rt0)
Fresh enum_primitive v0.1.0 (/Users/bradjc/git/tock/libraries/enum_primitive)
Fresh riscv-csr v0.1.0 (/Users/bradjc/git/tock/libraries/riscv-csr)
Fresh kernel v0.1.0 (/Users/bradjc/git/tock/kernel)
Fresh rv32i v0.1.0 (/Users/bradjc/git/tock/arch/rv32i)
Fresh capsules v0.1.0 (/Users/bradjc/git/tock/capsules)
Fresh sifive v0.1.0 (/Users/bradjc/git/tock/chips/sifive)
Fresh arty_e21 v0.1.0 (/Users/bradjc/git/tock/chips/arty_e21)
Compiling arty-e21 v0.1.0 (/Users/bradjc/git/tock/boards/arty-e21)
Running `rustc --edition=2018 --crate-name arty_e21 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=z -C panic=abort -C lto -C debuginfo=2 -C metadata=c1355c6c3289bbe0 -C extra-filename=-c1355c6c3289bbe0 --out-dir /Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps --target riscv32imac-unknown-none-elf -L dependency=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps -L dependency=/Users/bradjc/git/tock/boards/arty-e21/target/release/deps --extern arty_e21=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libarty_e21-fe0d635f7042045b.rlib --extern capsules=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libcapsules-16a235e3bdbefd38.rlib --extern kernel=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libkernel-1dbef041a1db2265.rlib --extern rv32i=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/librv32i-854677d7afde0e8d.rlib --extern sifive=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libsifive-1da1c765f34d5c05.rlib -C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512`
error: internal compiler error: src/librustc/traits/codegen/mod.rs:127: Encountered errors `[FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<() as core::fmt::Display>)), depth=1),Unimplemented)]` resolving bounds after type-checking
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:925:9
note: run with `RUST_BACKTRACE=1` environment variable to display a 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.40.0-nightly (0e8a4b441 2019-10-16) running on x86_64-apple-darwin
note: compiler flags: -C opt-level=z -C panic=abort -C lto -C debuginfo=2 -C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512 --crate-type bin
note: some of the compiler flags provided by cargo are hidden
error: aborting due to previous error
error: could not compile `arty-e21`.
Caused by:
process didn't exit successfully: `rustc --edition=2018 --crate-name arty_e21 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=z -C panic=abort -C lto -C debuginfo=2 -C metadata=c1355c6c3289bbe0 -C extra-filename=-c1355c6c3289bbe0 --out-dir /Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps --target riscv32imac-unknown-none-elf -L dependency=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps -L dependency=/Users/bradjc/git/tock/boards/arty-e21/target/release/deps --extern arty_e21=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libarty_e21-fe0d635f7042045b.rlib --extern capsules=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libcapsules-16a235e3bdbefd38.rlib --extern kernel=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libkernel-1dbef041a1db2265.rlib --extern rv32i=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/librv32i-854677d7afde0e8d.rlib --extern sifive=/Users/bradjc/git/tock/boards/arty-e21/target/riscv32imac-unknown-none-elf/release/deps/libsifive-1da1c765f34d5c05.rlib -C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512` (exit code: 101)
make: *** [target/riscv32imac-unknown-none-elf/release/arty-e21] Error 101
Travis also seems to agree that it will not compile: https://travis-ci.org/tock/tock/builds/602484885
If possible, could you please provide a self-contained example that ICEs on e.g. the playground?
Hmm...I tried creating a small example, but I can't seem to replicate the behavior. I'm not really sure what is happening to cause it.
I have found that the error occurs even though I'm not actually creating an object of type PMPConfig. However, if I remove
let _ = writer.write_fmt(format_args!("{}", config));
from a different crate which is where the fmt function would get used if I did create something of the type then the error does not occur.
triage: P-high, removing I-nominated label
I cannot reproduce this locally:
% git remote -v
origin [email protected]:tock/tock.git (fetch)
origin [email protected]:tock/tock.git (push)
% git log -1 --format=oneline
d423f7e969972e8cd662a37cd13c4fbf2b0a6ee9 (HEAD -> master, origin/staging, origin/master, origin/HEAD) Merge #1458
% git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
% cd boards/arty-e21/
% RUSTFLAGS="-C link-arg=-Tlayout.ld -C linker=rust-lld -C linker-flavor=ld.lld -C relocation-model=dynamic-no-pic -C link-arg=-zmax-page-size=512" cargo +nightly-2019-10-17 build --target riscv32imac-unknown-none-elf
Compiling tock-registers v0.4.1 (/Users/felixklock/Dev/Mozilla/issue65774/tock/libraries/tock-register-interface)
Compiling tock-cells v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/libraries/tock-cells)
Compiling tock_rt0 v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/libraries/tock-rt0)
Compiling enum_primitive v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/libraries/enum_primitive)
Compiling arty-e21 v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/boards/arty-e21)
Compiling kernel v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/kernel)
Compiling riscv-csr v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/libraries/riscv-csr)
Compiling rv32i v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/arch/rv32i)
Compiling capsules v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/capsules)
Compiling sifive v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/chips/sifive)
Compiling arty_e21 v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/chips/arty_e21)
Compiling components v0.1.0 (/Users/felixklock/Dev/Mozilla/issue65774/tock/boards/components)
Finished dev [optimized + debuginfo] target(s) in 10.99s
%
Please do try to come up with an MCVE. I recommend taking the original code and paring it down, rather than trying to jump straight to a minimal bit of code.
closing as not reproducible in absence of MCVE
Thank you for being willing to try to reproduce! Would you mind trying
again with the "mpu-print" branch checked out? Tock for RISCV compiles
correctly (and has for a while) on master, but the issue has creeped in
when making the change for https://github.com/tock/tock/pull/1428.
Also, I have been periodically checking new nightlies and have gotten the
same error.
On Thu, Nov 14, 2019, 7:42 AM Felix S Klock II notifications@github.com
wrote:
Closed #65774 https://github.com/rust-lang/rust/issues/65774.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/rust-lang/rust/issues/65774?email_source=notifications&email_token=AALGL4SZ3UOTVFVEYPXVPELQTVBTFA5CNFSM4JEZKQD2YY3PNVWWK3TUL52HS4DFWZEXG43VMVCXMZLOORHG65DJMZUWGYLUNFXW5KTDN5WW2ZLOORPWSZGOU3J57RA#event-2798903236,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AALGL4VOBLW7IA53IWXPE7TQTVBTFANCNFSM4JEZKQDQ
.
Ah, okay, I overlooked that detail earlier.
Now I can reproduce it.
Reopening (and will try to minimize, if only as fodder for a blog post on reducing i am planning)
Okay I've narrowed it down.
I don't have the test case into a state where I'm ready to post it yet (I need to clean it up a little more)
But if you want to fix your problem, its this:
pub trait MPU {
type MpuConfig: Default + Display = ();
...
}
Namely, you are using the (feature-gated) #![feature(associated_type_defaults)], and we do not currently properly check that the right-hand side of a given default actually implements any traits that bound the associated type.
Specifically in this case, () does not implement Display.
But instead of nicely reporting that to you at the trait definition site, or even at a trait implementation site, you are instead seeing an error far far downstream, unfortunately.
(As for how to work around this, I suspect your best bet is to make your own unit-struct that implements Default and Display and then plug that in as the default type in MpuConfig.)
Okay here is the reduction (play):
#![feature(associated_type_defaults)]
trait MyDisplay { fn method(&self) { } }
impl<'a, T: MyDisplay> MyDisplay for &'a mut T { }
struct T;
trait MPU {
type MpuConfig: MyDisplay = T;
}
struct S;
impl MPU for S { }
trait MyWrite {
fn my_write(&self, _: &dyn MyDisplay) { }
}
trait ProcessType {
fn process_detail_fmt(&self, _: &mut dyn MyWrite);
}
struct Process;
impl ProcessType for Process {
fn process_detail_fmt(&self, writer: &mut dyn MyWrite)
{
let mut val: Option<<S as MPU>::MpuConfig> = None;
let valref: &mut <S as MPU>::MpuConfig = val.as_mut().unwrap();
// // This causes a different ICE (but its similar if you squint right):
// //
// // `Unimplemented` selecting `Binder(<T as MyDisplay>)` during codegen
//
// writer.my_write(valref)
// This one causes the ICE:
// FulfillmentError(Obligation(predicate=Binder(TraitPredicate(<T as MyDisplay>)), depth=1),Unimplemented)
let closure = |config: &mut <S as MPU>::MpuConfig| writer.my_write(&config);
closure(valref);
}
}
fn create() -> &'static dyn ProcessType {
let input: Option<&mut Process> = None;
let process: &mut Process = input.unwrap();
process
}
pub fn main() {
create();
}
related: bug #62211, PR #61812, bug #33017
I'm going to downgrade this from P-high to P-medium, based on:
(it may or may not be fixed by #61812; I haven't checked that.)
cc @jonas-schievink re. #61812.
Most helpful comment
Okay here is the reduction (play):