Auto merge of #95819 - oli-obk:mir_can't_hold_all_these_lifetimes, r=estebank

Enforce Copy bounds for repeat elements while considering lifetimes

fixes https://github.com/rust-lang/rust/issues/95477

this is a breaking change in order to fix a soundness bug.

Before this PR we only checked whether the repeat element type had an `impl Copy`, but not whether that impl also had the appropriate lifetimes. E.g. if the impl was for `YourType<'static>` and not a general `'a`, then copying any type other than a `'static` one should have been rejected, but wasn't.

r? `@lcnr`
This commit is contained in:
bors 2022-04-29 20:00:47 +00:00
commit a707f40107
24 changed files with 183 additions and 96 deletions

View file

@ -2227,7 +2227,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
}
ObligationCauseCode::RepeatElementCopy { is_const_fn } => {
err.note(
"the `Copy` trait is required because the repeated element will be copied",
"the `Copy` trait is required because this value will be copied for each element of the array",
);
if is_const_fn {