Skip to content

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

Closed

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

Activity

  1. added
    E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
    T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
    E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.
    A-const-genericsArea: const generics (parameters and arguments)
    F-gca_min_const_items`#![feature(gca_min_const_items)]` (previously: `min_generic_const_args`)
    on Jan 2, 2026
  2. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Jan 2, 2026
  3. removed
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Jan 2, 2026
  4. added 4 commits that reference this issue on Jan 9, 2026
    88beaf7
    83bea58
    3723c18
    727688a
  5. added a commit that references this issue on Jan 11, 2026
    cc6e48d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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-gca_min_const_items`#![feature(gca_min_const_items)]` (previously: `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