Currently the wellformedness requirements of ty::Const does not require that ty::Const as the fields of ADTs have the type of the ADT's field. See this test
|
#![feature(min_generic_const_args, adt_const_params)] |
|
#![expect(incomplete_features)] |
|
|
|
#[derive(Eq, PartialEq, std::marker::ConstParamTy)] |
|
struct Foo<T> { field: T } |
|
|
|
fn accepts<const N: Foo<u8>>() {} |
|
|
|
fn bar<const N: bool>() { |
|
// `N` is not of type `u8` but we don't actually check this anywhere yet |
|
accepts::<{ Foo::<u8> { field: N }}>(); |
|
} |
To fix this we should update wf::obligations for ty::Const to emit ConstArgHasType goals for ty::Consts in ValTreeKind::Branch according to the type of their parent ValTree node.
cc @camelid I've assigned you as we've talked about you implementing this on zulip
Currently the wellformedness requirements of
ty::Constdoes not require thatty::Constas the fields of ADTs have the type of the ADT's field. See this testrust/tests/ui/const-generics/mgca/adt_expr_fields_type_check.rs
Lines 4 to 15 in 5497a36
To fix this we should update
wf::obligationsforty::Constto emitConstArgHasTypegoals forty::Consts inValTreeKind::Branchaccording to the type of their parentValTreenode.cc @camelid I've assigned you as we've talked about you implementing this on zulip