Auto merge of #150786 - reddevilmidzy:mgca-array, r=BoxyUwU

mGCA: Support array expression as direct const arguments

tracking issue: rust-lang/rust#132980
resolve: rust-lang/rust#150612

Support array expression as direct const arguments (e. g. [1, 2, N]) in min_generic_const_args.

todo:
* [x] Rebase another mGCA PR
* [x] Add more test case
* [x] Modify clippy code
This commit is contained in:
bors 2026-01-12 13:26:21 +00:00
commit d20c5de76c
3 changed files with 13 additions and 0 deletions

View file

@ -321,6 +321,7 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
},
ConstArgKind::Struct(..) => chain!(self, "let ConstArgKind::Struct(..) = {const_arg}.kind"),
ConstArgKind::TupleCall(..) => chain!(self, "let ConstArgKind::TupleCall(..) = {const_arg}.kind"),
ConstArgKind::Array(..) => chain!(self, "let ConstArgKind::Array(..) = {const_arg}.kind"),
ConstArgKind::Infer(..) => chain!(self, "let ConstArgKind::Infer(..) = {const_arg}.kind"),
ConstArgKind::Error(..) => chain!(self, "let ConstArgKind::Error(..) = {const_arg}.kind"),
ConstArgKind::Tup(..) => chain!(self, "let ConstArgKind::Tup(..) = {const_arg}.kind"),

View file

@ -1144,6 +1144,7 @@ pub fn const_item_rhs_to_expr<'tcx>(tcx: TyCtxt<'tcx>, ct_rhs: ConstItemRhs<'tcx
| ConstArgKind::Tup(..)
| ConstArgKind::Literal(..)
| ConstArgKind::TupleCall(..)
| ConstArgKind::Array(..)
| ConstArgKind::Path(_)
| ConstArgKind::Error(..)
| ConstArgKind::Infer(..) => None,

View file

@ -687,6 +687,11 @@ impl HirEqInterExpr<'_, '_, '_> {
.all(|(arg_a, arg_b)| self.eq_const_arg(arg_a, arg_b))
},
(ConstArgKind::Literal(kind_l), ConstArgKind::Literal(kind_r)) => kind_l == kind_r,
(ConstArgKind::Array(l_arr), ConstArgKind::Array(r_arr)) => {
l_arr.elems.len() == r_arr.elems.len()
&& l_arr.elems.iter().zip(r_arr.elems.iter())
.all(|(l_elem, r_elem)| self.eq_const_arg(l_elem, r_elem))
}
// Use explicit match for now since ConstArg is undergoing flux.
(
ConstArgKind::Path(..)
@ -696,6 +701,7 @@ impl HirEqInterExpr<'_, '_, '_> {
| ConstArgKind::Infer(..)
| ConstArgKind::Struct(..)
| ConstArgKind::Literal(..)
| ConstArgKind::Array(..)
| ConstArgKind::Error(..),
_,
) => false,
@ -1575,6 +1581,11 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
self.hash_const_arg(arg);
}
},
ConstArgKind::Array(array_expr) => {
for elem in array_expr.elems {
self.hash_const_arg(elem);
}
},
ConstArgKind::Infer(..) | ConstArgKind::Error(..) => {},
ConstArgKind::Literal(lit) => lit.hash(&mut self.s),
}