Skip to content

Normalization can skip WF #100041

Open
Open
@CAD97

Description

@CAD97

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 trait Sized is not implemented for [u8]
= note: slice and array elements must have Sized 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.

Meta

1.64.0-nightly (2022-07-31 f9cba63)

@rustbot label +A-associated-items

cc @eddyb who said this was
@rustbot label +I-unsound

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-associated-itemsArea: Associated items (types, constants & functions)C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️I-unsoundIssue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessP-mediumMedium priorityS-bug-has-testStatus: This bug is tracked inside the repo by a `known-bug` test.T-typesRelevant to the types team, which will review and decide on the PR/issue.fixed-by-next-solverFixed by the next-generation trait solver, `-Znext-solver`.glacierICE tracked in rust-lang/glacier.

    Type

    No type

    Projects

    Status

    new solver everywhere

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions