-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Open
Labels
A-auto-traitsArea: auto traits (e.g., `auto trait Send {}`)Area: auto traits (e.g., `auto trait Send {}`)A-synthetic-implsArea: Synthetic impls, used by rustdoc to document auto traits and traits with blanket implsArea: Synthetic impls, used by rustdoc to document auto traits and traits with blanket implsC-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.Relevant to the rustdoc team, which will review and decide on the PR/issue.
Description
Code
// pin-project=1.1.10, pin-project-internal=1.1.10
use std::marker;
use std::path::PathBuf;
use std::pin::Pin;
use std::task::Context;
use std::task::Poll;
use pin_project::pin_project;
pub enum Error {}
pub type Result<T> = std::result::Result<T, Error>;
pub trait ReadFromAsync: Sized {
type Future: Future<Output = Result<Self>> + Send + 'static
where
Self: 'static;
fn read_from_async(path: PathBuf) -> Self::Future;
}
pub trait WriteToAsync {
type Future<'a>: Future<Output = Result<()>> + Send + 'a
where
Self: 'a;
fn write_to_async<'a>(&'a self, path: PathBuf) -> Self::Future<'a>;
}
pub trait WriteToAsyncOwned<'a>: Sized {
type Future: Future<Output = Result<()>> + Send + 'a;
fn write_to_async_owned(self, path: PathBuf) -> Self::Future;
}
#[derive(Debug, Clone, Hash)]
pub struct DeferredRead<T>(pub PathBuf, marker::PhantomData<T>);
#[pin_project(project_replace = DeferredReadWriteFutureProj)]
pub enum DeferredReadWriteFuture<'a, T>
where
T: ReadFromAsync + WriteToAsyncOwned<'a> + Send + 'static,
<T as ReadFromAsync>::Future: Future<Output = Result<T>> + Unpin,
<T as WriteToAsyncOwned<'a>>::Future: Future<Output = Result<()>> + Unpin,
{
A {
v: marker::PhantomData<T>,
l: marker::PhantomData<&'a ()>,
},
}
impl<'a, T> Future for DeferredReadWriteFuture<'a, T>
where
T: ReadFromAsync + WriteToAsyncOwned<'a> + Send + 'static,
<T as ReadFromAsync>::Future: Future<Output = Result<T>> + Unpin,
<T as WriteToAsyncOwned<'a>>::Future: Future<Output = Result<()>> + Unpin,
{
type Output = Result<()>;
fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
todo!()
}
}
impl<T> WriteToAsync for DeferredRead<T>
where
T: ReadFromAsync + for<'a> WriteToAsyncOwned<'a> + Send + 'static,
<T as ReadFromAsync>::Future: Future<Output = Result<T>> + Unpin,
for<'a> <T as WriteToAsyncOwned<'a>>::Future: Future<Output = Result<()>> + Unpin,
{
type Future<'a>
= DeferredReadWriteFuture<'a, T>
where
Self: 'a;
fn write_to_async(&self, _path: PathBuf) -> Self::Future<'_> {
todo!()
}
}
#[pin_project(project_replace = DeferredReadOrOwnWriteFutureProj)]
pub enum DeferredReadOrOwnWriteFuture<'a, T>
where
T: ReadFromAsync + WriteToAsync + for<'b> WriteToAsyncOwned<'b> + Send + 'static,
<T as ReadFromAsync>::Future: Future<Output = Result<T>> + Unpin,
<T as WriteToAsync>::Future<'a>: Future<Output = Result<()>> + Unpin,
for<'b> <T as WriteToAsyncOwned<'b>>::Future: Future<Output = Result<()>> + Unpin,
{
Deferred {
inner: <DeferredRead<T> as WriteToAsync>::Future<'a>,
},
}
Meta
rustc --version --verbose
:
rustc 1.91.0-nightly (f34ba774c 2025-08-03)
binary: rustc
commit-hash: f34ba774c78ea32b7c40598b8ad23e75cdac42a6
commit-date: 2025-08-03
host: x86_64-apple-darwin
release: 1.91.0-nightly
LLVM version: 20.1.8
Error output
thread 'rustc' panicked at /rustc/f34ba774c78ea32b7c40598b8ad23e75cdac42a6/compiler/rustc_trait_selection/src/traits/auto_trait.rs:160:13:
Unable to fulfill trait DefId(2:38164 ~ core[8961]::marker::Unpin) for 'DeferredReadOrOwnWriteFutureProj<'a/#0, T/#1>': [Ambiguity, Ambiguity]
stack backtrace:
0: 0x115edd5a7 - std::backtrace::Backtrace::create::hb36e8c917a03cafd
1: 0x115edd4f5 - std::backtrace::Backtrace::force_capture::h228c11e9e01224f1
2: 0x1139860c7 - rustc_driver_impl[a9a40758cd2cdef9]::install_ice_hook::{closure#1}
3: 0x115efc01d - std::panicking::rust_panic_with_hook::h3af81ec44450c854
4: 0x115efbc08 - std::panicking::begin_panic_handler::{{closure}}::h26b000b63eb9d24c
5: 0x115ef6b29 - std::sys::backtrace::__rust_end_short_backtrace::ha9f22b08fa18ae35
6: 0x115efb864 - __rustc[46d736129294a9b7]::rust_begin_unwind
7: 0x1191fba6f - core::panicking::panic_fmt::hdf5da01566eeee99
8: 0x10617988d - <rustc_trait_selection[9a62322ed5ac551a]::traits::auto_trait::AutoTraitFinder>::find_auto_trait_generics::<rustdoc[e1c355f1fc2c8f11]::clean::types::Generics, rustdoc[e1c355f1fc2c8f11]::clean::auto_trait::synthesize_auto_trait_impl::{closure#0}>
9: 0x106549b93 - rustdoc[e1c355f1fc2c8f11]::clean::auto_trait::synthesize_auto_trait_impl
10: 0x1063edb7b - rustdoc[e1c355f1fc2c8f11]::clean::utils::synthesize_auto_trait_and_blanket_impls
11: 0x10651e990 - <rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::SyntheticImplCollector as rustdoc[e1c355f1fc2c8f11]::visit::DocVisitor>::visit_item
12: 0x10651e8bc - <rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::SyntheticImplCollector as rustdoc[e1c355f1fc2c8f11]::visit::DocVisitor>::visit_item
13: 0x10651a47b - rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::collect_trait_impls
14: 0x1064219a2 - rustdoc[e1c355f1fc2c8f11]::core::run_global_ctxt
15: 0x106546485 - rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}::{closure#0}
16: 0x1062b3d1b - rustc_interface[25c42c93eb8740f1]::interface::run_compiler::<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}
17: 0x106235f68 - std[44cc8fe43e69011]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_with_globals<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_pool_with_globals<rustc_interface[25c42c93eb8740f1]::interface::run_compiler<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
18: 0x1062c27a2 - <<std[44cc8fe43e69011]::thread::Builder>::spawn_unchecked_<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_with_globals<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_pool_with_globals<rustc_interface[25c42c93eb8740f1]::interface::run_compiler<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[8961e4dbb286a9de]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
19: 0x115effc4f - std::sys::pal::unix::thread::Thread::new::thread_start::h877171adda2286a6
20: 0x7ff808d881d3 - __pthread_start
rustc version: 1.91.0-nightly (f34ba774c 2025-08-03)
platform: x86_64-apple-darwin
query stack during panic:
end of query stack
Backtrace
thread 'rustc' panicked at /rustc/f34ba774c78ea32b7c40598b8ad23e75cdac42a6/compiler/rustc_trait_selection/src/traits/auto_trait.rs:160:13:
Unable to fulfill trait DefId(2:38164 ~ core[8961]::marker::Unpin) for 'DeferredReadOrOwnWriteFutureProj<'a/#0, T/#1>': [Ambiguity, Ambiguity]
stack backtrace:
0: 0x115ef667f - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::ha0bb7b1a958de3ae
1: 0x112b630c3 - core::fmt::write::h0af842998b44df14
2: 0x115eea772 - std::io::Write::write_fmt::h8d0c2db09535a547
3: 0x115ef64d2 - std::sys::backtrace::BacktraceLock::print::h0796a4708d3a2a65
4: 0x115efb644 - std::panicking::default_hook::{{closure}}::h6345b3d99db094c0
5: 0x115efb1b7 - std::panicking::default_hook::hea3406d0c10d38e4
6: 0x113985e7d - rustc_driver_impl[a9a40758cd2cdef9]::install_ice_hook::{closure#1}
7: 0x115efc01d - std::panicking::rust_panic_with_hook::h3af81ec44450c854
8: 0x115efbc08 - std::panicking::begin_panic_handler::{{closure}}::h26b000b63eb9d24c
9: 0x115ef6b29 - std::sys::backtrace::__rust_end_short_backtrace::ha9f22b08fa18ae35
10: 0x115efb864 - __rustc[46d736129294a9b7]::rust_begin_unwind
11: 0x1191fba6f - core::panicking::panic_fmt::hdf5da01566eeee99
12: 0x10617988d - <rustc_trait_selection[9a62322ed5ac551a]::traits::auto_trait::AutoTraitFinder>::find_auto_trait_generics::<rustdoc[e1c355f1fc2c8f11]::clean::types::Generics, rustdoc[e1c355f1fc2c8f11]::clean::auto_trait::synthesize_auto_trait_impl::{closure#0}>
13: 0x106549b93 - rustdoc[e1c355f1fc2c8f11]::clean::auto_trait::synthesize_auto_trait_impl
14: 0x1063edb7b - rustdoc[e1c355f1fc2c8f11]::clean::utils::synthesize_auto_trait_and_blanket_impls
15: 0x10651e990 - <rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::SyntheticImplCollector as rustdoc[e1c355f1fc2c8f11]::visit::DocVisitor>::visit_item
16: 0x10651e8bc - <rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::SyntheticImplCollector as rustdoc[e1c355f1fc2c8f11]::visit::DocVisitor>::visit_item
17: 0x10651a47b - rustdoc[e1c355f1fc2c8f11]::passes::collect_trait_impls::collect_trait_impls
18: 0x1064219a2 - rustdoc[e1c355f1fc2c8f11]::core::run_global_ctxt
19: 0x106546485 - rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}::{closure#0}
20: 0x1062b3d1b - rustc_interface[25c42c93eb8740f1]::interface::run_compiler::<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}
21: 0x106235f68 - std[44cc8fe43e69011]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_with_globals<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_pool_with_globals<rustc_interface[25c42c93eb8740f1]::interface::run_compiler<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
22: 0x1062c27a2 - <<std[44cc8fe43e69011]::thread::Builder>::spawn_unchecked_<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_with_globals<rustc_interface[25c42c93eb8740f1]::util::run_in_thread_pool_with_globals<rustc_interface[25c42c93eb8740f1]::interface::run_compiler<(), rustdoc[e1c355f1fc2c8f11]::main_args::{closure#2}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[8961e4dbb286a9de]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
23: 0x115effc4f - std::sys::pal::unix::thread::Thread::new::thread_start::h877171adda2286a6
24: 0x7ff808d881d3 - __pthread_start
error: 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-rustdoc&template=ice.md
note: please make sure that you have updated to the latest nightly
note: please attach the file at `/Users/dinu/proj/narxia/rustc-ice-2025-08-04T17_16_00-36115.txt` to your bug report
note: compiler flags: --crate-type lib
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
end of query stack
Metadata
Metadata
Assignees
Labels
A-auto-traitsArea: auto traits (e.g., `auto trait Send {}`)Area: auto traits (e.g., `auto trait Send {}`)A-synthetic-implsArea: Synthetic impls, used by rustdoc to document auto traits and traits with blanket implsArea: Synthetic impls, used by rustdoc to document auto traits and traits with blanket implsC-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.Relevant to the rustdoc team, which will review and decide on the PR/issue.