Open
Description
I tried this code: [playground]
trait WellUnformed {
type RequestNormalize;
}
impl<T: ?Sized> WellUnformed for T {
type RequestNormalize = ();
}
const _: <[[[[[[u8]]]]]] as WellUnformed>::RequestNormalize = ();
const _: <Vec<str> as WellUnformed>::RequestNormalize = ();
I expected this to error; [[[[[[u8]]]]]]
is clearly not a well-formed type, as
error[E0277]: the size for values of type
[u8]
cannot be known at compilation time
= help: the traitSized
is not implemented for[u8]
= note: slice and array elements must haveSized
type
Vec<str>
is perhaps even more cursed.
Instead: it compiles.
This is especially relevant for blanket/builtin traits which have associated types, such as marker::DiscriminantKind
and ptr::Pointee
.
- Can cause ICE: Normalization can skip WF #100041 (comment)
- Believed to not be unsound in isolation, as the non-WF type never "fully" exists.
Meta
1.64.0-nightly (2022-07-31 f9cba63)
@rustbot label +A-associated-items
Metadata
Metadata
Assignees
Labels
Area: Associated items (types, constants & functions)Category: This is a bug.Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessMedium priorityStatus: This bug is tracked inside the repo by a `known-bug` test.Relevant to the types team, which will review and decide on the PR/issue.Fixed by the next-generation trait solver, `-Znext-solver`.ICE tracked in rust-lang/glacier.
Type
Projects
Status
new solver everywhere