1
Fork 0

Use correct param-env in MissingCopyImplementations

This commit is contained in:
Michael Goulet 2024-05-22 12:46:08 -04:00
parent 72d8d8d9f9
commit 8369dbba43
2 changed files with 25 additions and 5 deletions

View file

@ -674,11 +674,10 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
return; return;
} }
} }
let param_env = ty::ParamEnv::empty(); if ty.is_copy_modulo_regions(cx.tcx, cx.param_env) {
if ty.is_copy_modulo_regions(cx.tcx, param_env) {
return; return;
} }
if type_implements_negative_copy_modulo_regions(cx.tcx, ty, param_env) { if type_implements_negative_copy_modulo_regions(cx.tcx, ty, cx.param_env) {
return; return;
} }
if def.is_variant_list_non_exhaustive() if def.is_variant_list_non_exhaustive()
@ -694,7 +693,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
.tcx .tcx
.infer_ctxt() .infer_ctxt()
.build() .build()
.type_implements_trait(iter_trait, [ty], param_env) .type_implements_trait(iter_trait, [ty], cx.param_env)
.must_apply_modulo_regions() .must_apply_modulo_regions()
{ {
return; return;
@ -711,7 +710,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
if type_allowed_to_implement_copy( if type_allowed_to_implement_copy(
cx.tcx, cx.tcx,
param_env, cx.param_env,
ty, ty,
traits::ObligationCause::misc(item.span, item.owner_id.def_id), traits::ObligationCause::misc(item.span, item.owner_id.def_id),
) )

View file

@ -0,0 +1,21 @@
//@ check-pass
#![feature(trivial_bounds)]
#![allow(trivial_bounds)]
// Make sure that we still use the where-clauses from the struct when checking
// if it may implement `Copy` unconditionally.
// Fix for <https://github.com/rust-lang/rust/issues/125394>.
pub trait Foo {
type Assoc;
}
pub struct Bar;
// This needs to be public
pub struct Baz2(<Bar as Foo>::Assoc)
where
Bar: Foo;
fn main() {}