Closed
Description
I tried this code:
https://cs.opensource.google/fuchsia/fuchsia/+/main:src/connectivity/network/netcfg/src/lib.rs;l=1762;drc=4a7d2eb6793e61c0021f8dd7dab35804590d36b6
The function beginning with the signature:
async fn create_device_stream(
&self,
) -> Result<
impl futures::Stream<Item = Result<devices::NetworkDeviceInstance, anyhow::Error>>,
anyhow::Error,
> { ... }
I expected to see this happen: Compiles successfully, as it did on previous releases.
Instead, this happened:
error: concrete type differs from previous defining opaque type use
--> ../../src/connectivity/network/netcfg/src/lib.rs:1765:9
|
1765 | impl futures::Stream<Item = Result<devices::NetworkDeviceInstance, anyhow::Error>>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| expected `TryFlattenUnordered<futures::stream::Fuse<TryFilterMap<futures::stream::ErrInto<Watcher, anyhow::Error>, [async block@../../src/connectivity/network/netcfg/src/lib.rs:1782:17: 1843:18], [closure@../../src/connectivity/network/netcfg/src/lib.rs:1780:29: 1780:82]>>>`, got `TryFlattenUnordered<futures::stream::Fuse<TryFilterMap<futures::stream::ErrInto<Watcher, anyhow::Error>, [async block@../../src/connectivity/network/netcfg/src/lib.rs:1782:17: 1843:18], [closure@../../src/connectivity/network/netcfg/src/lib.rs:1780:29: 1780:82]>>>`
| this expression supplies two conflicting concrete types for the same opaque type
error: aborting due to previous error
Recompiling with -Zverbose
outputs:
error: concrete type differs from previous defining opaque type use
--> ../../src/connectivity/network/netcfg/src/lib.rs:1765:9
|
1765 | impl futures::Stream<Item = Result<devices::NetworkDeviceInstance, anyhow::Error>>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| expected `TryFlattenUnordered<futures::stream::Fuse<TryFilterMap<futures::stream::ErrInto<Watcher, anyhow::Error>, [static NetCfg<ReEarlyBound(DefId(0:3068 ~ netcfg[7715]::{impl#13}::create_device_stream::{opaque#0}::'a), 2, 'a)>::create_device_stream::{closure#0}::{closure#2}::{closure#0} upvar_tys=(fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy) for<Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None))> {ResumeTy, fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(None) }) InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(None) }) PathBuf, Opaque(DefId(0:2630 ~ netcfg[7715]::devices::{impl#4}::get_instance_stream::{opaque#0}), [ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(None) }), ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(None) })]), ()}], [NetCfg<ReEarlyBound(DefId(0:3068 ~ netcfg[7715]::{impl#13}::create_device_stream::{opaque#0}::'a), 2, 'a)>::create_device_stream::{closure#0}::{closure#2} closure_kind_ty=i16 closure_sig_as_fn_ptr_ty=extern "rust-call" fn((WatchMessage,)) -> [static NetCfg<ReEarlyBound(DefId(0:3068 ~ netcfg[7715]::{impl#13}::create_device_stream::{opaque#0}::'a), 2, 'a)>::create_device_stream::{closure#0}::{closure#2}::{closure#0} upvar_tys=(fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy) for<Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None))> {ResumeTy, fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(None) }) InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(None) }) PathBuf, Opaque(DefId(0:2630 ~ netcfg[7715]::devices::{impl#4}::get_instance_stream::{opaque#0}), [ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(None) }), ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(None) })]), ()}] upvar_tys=(InstallerProxy)]>>>`, got `TryFlattenUnordered<futures::stream::Fuse<TryFilterMap<futures::stream::ErrInto<Watcher, anyhow::Error>, [static NetCfg<ReEarlyBound(DefId(0:626 ~ netcfg[7715]::{impl#13}::'a), 0, 'a)>::create_device_stream::{closure#0}::{closure#2}::{closure#0} upvar_tys=(fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy) for<Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None))> {ResumeTy, fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(None) }) InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(None) }) PathBuf, Opaque(DefId(0:2630 ~ netcfg[7715]::devices::{impl#4}::get_instance_stream::{opaque#0}), [ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(None) }), ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(None) })]), ()}], [NetCfg<ReEarlyBound(DefId(0:626 ~ netcfg[7715]::{impl#13}::'a), 0, 'a)>::create_device_stream::{closure#0}::{closure#2} closure_kind_ty=i16 closure_sig_as_fn_ptr_ty=extern "rust-call" fn((WatchMessage,)) -> [static NetCfg<ReEarlyBound(DefId(0:626 ~ netcfg[7715]::{impl#13}::'a), 0, 'a)>::create_device_stream::{closure#0}::{closure#2}::{closure#0} upvar_tys=(fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy) for<Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None)), Region(BrAnon(None))> {ResumeTy, fuchsia_fs::directory::WatchEvent, PathBuf, InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(None) }) InstallerProxy, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(None) }) PathBuf, Opaque(DefId(0:2630 ~ netcfg[7715]::devices::{impl#4}::get_instance_stream::{opaque#0}), [ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(None) }), ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(None) })]), ()}] upvar_tys=(InstallerProxy)]>>>`
| this expression supplies two conflicting concrete types for the same opaque type
error: aborting due to previous error
Which when diffed, shows a change only from instances of
NetCfg<ReEarlyBound(DefId(0:3068 ~ netcfg[7715]::{impl#13}::create_device_stream::{opaque#0}::'a), 2, 'a)>
to
NetCfg<ReEarlyBound(DefId(0:626 ~ netcfg[7715]::{impl#13}::'a), 0, 'a)>
.
Meta
Error output is from rustc commit 139b49b
Likely related to #113661, CC @oli-obk @lcnr