Closed
Description
With #66059, mem::uninitialized
and mem::zeroed
dynamically detect some misuses (such as mem::zeroed::<&T>()
or mem::uninitialized::<bool>()
) and panic instead of causing UB. Also see this summary for the original FCP. But the check is conservative for now to reduce breakage. This is to track strengthening the check.
- We should recursively check the fields of structs and tuples. This is happening in might_permit_raw_init: also check aggregate fields #71274.
- We should check inside arrays, too. We currently do not because smallvec < 0.6.13 didn't use
MaybeUninit
and thus triggers this check (if the type inside the array has invalid bit patterns). Other widely-used crates that trigger the panic as of Dec 2021:- hyper (fixed since 0.14.12)
- crossbeam-queue 0.2.1, crossbeam-channel 0.3.9, crossbeam 0.2.12 (these are ancient; current versions are fine AFAIK)
- We should check
Variant::Multiple
enums, which currently we do not just to stay conservative.