Skip to content

MGCA: Check that const arguments in struct exprs are correctly typed #150623

@BoxyUwU

Description

@BoxyUwU

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

Metadata

Metadata

Assignees

Labels

A-const-genericsArea: const generics (parameters and arguments)E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.F-min_generic_const_args`#![feature(min_generic_const_args)]`T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions