1
Fork 0

added a suggestion to create a const item if the fn in the array repeat expression is a const fn

This commit is contained in:
Henry Boisdequin 2021-01-29 11:54:19 +05:30
parent 368275062f
commit c2e849c022
7 changed files with 87 additions and 4 deletions

View file

@ -1881,10 +1881,26 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
ObligationCauseCode::Coercion { source: _, target } => {
err.note(&format!("required by cast to type `{}`", self.ty_to_string(target)));
}
ObligationCauseCode::RepeatVec => {
ObligationCauseCode::RepeatVec(is_const_fn) => {
err.note(
"the `Copy` trait is required because the repeated element will be copied",
);
if is_const_fn && !self.tcx.sess.is_nightly_build() {
err.help(
"consider creating a new `const` item and initializing with the result \
of the function call to be used in the repeat position, like \
`const VAL: Type = const_fn();` and `let x = [VAL; 42];`",
);
} else if self.tcx.sess.is_nightly_build() && is_const_fn {
err.help(
"create an inline `const` block, see PR \
#2920 <https://github.com/rust-lang/rfcs/pull/2920> \
for more information",
);
} else {
// Don't suggest anything to the user as suggesting the user to make the function `const`
// could lead them down the wrong path.
}
}
ObligationCauseCode::VariableType(hir_id) => {
let parent_node = self.tcx.hir().get_parent_node(hir_id);