Open
Description
Progress
-
#[diagnostic::on_unimplemented]
fails to trigger when certain impls are present rust-lang/rust#130563 - Per this comment, wait for
#[diagnostic::do_not_recommend]
to stabilize - Use
#[diagnostic::do_not_recommend]
on ourImmutable
impls for&T
and&mut T
Original text
Per #1288 (comment):
The compiler errors when a type is missing
Immutable
are somewhat misleading, although I'm not sure there's muchzerocopy
can do about this. An example where the compiler recommends adding a reference rather than implementingImmutable
(some were even more confusing than this):error[E0277]: the trait bound `virtio::wl::CtrlVfdNewDmabuf: zerocopy::Immutable` is not satisfied --> devices/src/virtio/wl.rs:317:20 | 317 | .write_obj(ctrl_vfd_new_dmabuf) | --------- ^^^^^^^^^^^^^^^^^^^ the trait `zerocopy::Immutable` is not implemented for `virtio::wl::CtrlVfdNewDmabuf` | | | required by a bound introduced by this call | note: required by a bound in `virtio::descriptor_utils::Writer::write_obj` --> devices/src/virtio/descriptor_utils.rs:536:25 | 536 | pub fn write_obj<T: Immutable + IntoBytes>(&mut self, val: T) -> io::Result<()> { | ^^^^^^^^^ required by this bound in `Writer::write_obj` help: consider borrowing here | 317 | .write_obj(&ctrl_vfd_new_dmabuf) | + 317 | .write_obj(&mut ctrl_vfd_new_dmabuf) | ++++
Taking the compiler's suggestion results in a different error with a recommendation to remove the reference (back to the original code).
It appears that this is a compiler issue: rust-lang/rust#130563