Skip to content

Commit d20c5de

Browse files
committed
Auto merge of rust-lang#150786 - reddevilmidzy:mgca-array, r=BoxyUwU
mGCA: Support array expression as direct const arguments tracking issue: rust-lang#132980 resolve: rust-lang#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
2 parents 4f2b878 + f4a6e4f commit d20c5de

3 files changed

Lines changed: 13 additions & 0 deletions

File tree

clippy_lints/src/utils/author.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
321321
},
322322
ConstArgKind::Struct(..) => chain!(self, "let ConstArgKind::Struct(..) = {const_arg}.kind"),
323323
ConstArgKind::TupleCall(..) => chain!(self, "let ConstArgKind::TupleCall(..) = {const_arg}.kind"),
324+
ConstArgKind::Array(..) => chain!(self, "let ConstArgKind::Array(..) = {const_arg}.kind"),
324325
ConstArgKind::Infer(..) => chain!(self, "let ConstArgKind::Infer(..) = {const_arg}.kind"),
325326
ConstArgKind::Error(..) => chain!(self, "let ConstArgKind::Error(..) = {const_arg}.kind"),
326327
ConstArgKind::Tup(..) => chain!(self, "let ConstArgKind::Tup(..) = {const_arg}.kind"),

clippy_utils/src/consts.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,7 @@ pub fn const_item_rhs_to_expr<'tcx>(tcx: TyCtxt<'tcx>, ct_rhs: ConstItemRhs<'tcx
11441144
| ConstArgKind::Tup(..)
11451145
| ConstArgKind::Literal(..)
11461146
| ConstArgKind::TupleCall(..)
1147+
| ConstArgKind::Array(..)
11471148
| ConstArgKind::Path(_)
11481149
| ConstArgKind::Error(..)
11491150
| ConstArgKind::Infer(..) => None,

clippy_utils/src/hir_utils.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,11 @@ impl HirEqInterExpr<'_, '_, '_> {
687687
.all(|(arg_a, arg_b)| self.eq_const_arg(arg_a, arg_b))
688688
},
689689
(ConstArgKind::Literal(kind_l), ConstArgKind::Literal(kind_r)) => kind_l == kind_r,
690+
(ConstArgKind::Array(l_arr), ConstArgKind::Array(r_arr)) => {
691+
l_arr.elems.len() == r_arr.elems.len()
692+
&& l_arr.elems.iter().zip(r_arr.elems.iter())
693+
.all(|(l_elem, r_elem)| self.eq_const_arg(l_elem, r_elem))
694+
}
690695
// Use explicit match for now since ConstArg is undergoing flux.
691696
(
692697
ConstArgKind::Path(..)
@@ -696,6 +701,7 @@ impl HirEqInterExpr<'_, '_, '_> {
696701
| ConstArgKind::Infer(..)
697702
| ConstArgKind::Struct(..)
698703
| ConstArgKind::Literal(..)
704+
| ConstArgKind::Array(..)
699705
| ConstArgKind::Error(..),
700706
_,
701707
) => false,
@@ -1575,6 +1581,11 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
15751581
self.hash_const_arg(arg);
15761582
}
15771583
},
1584+
ConstArgKind::Array(array_expr) => {
1585+
for elem in array_expr.elems {
1586+
self.hash_const_arg(elem);
1587+
}
1588+
},
15781589
ConstArgKind::Infer(..) | ConstArgKind::Error(..) => {},
15791590
ConstArgKind::Literal(lit) => lit.hash(&mut self.s),
15801591
}

0 commit comments

Comments
 (0)