@@ -30,7 +30,7 @@ use rustc_trait_selection::traits;
30
30
use rustc_trait_selection:: traits:: outlives_bounds:: InferCtxtExt as _;
31
31
use rustc_type_ir:: fold:: TypeFoldable ;
32
32
use tracing:: { debug, instrument} ;
33
- use ty:: TypingMode ;
33
+ use ty:: { TypingEnv , TypingMode } ;
34
34
use { rustc_attr_parsing as attr, rustc_hir as hir} ;
35
35
36
36
use super :: compare_impl_item:: check_type_bounds;
@@ -1035,6 +1035,9 @@ fn check_impl_items_against_trait<'tcx>(
1035
1035
1036
1036
let trait_def = tcx. trait_def ( trait_ref. def_id ) ;
1037
1037
1038
+ let self_is_sized =
1039
+ trait_ref. self_ty ( ) . is_sized ( tcx, TypingEnv :: non_body_analysis ( tcx, impl_id) ) ;
1040
+
1038
1041
for & impl_item in impl_item_refs {
1039
1042
let ty_impl_item = tcx. associated_item ( impl_item) ;
1040
1043
let ty_trait_item = if let Some ( trait_item_id) = ty_impl_item. trait_item_def_id {
@@ -1064,6 +1067,15 @@ fn check_impl_items_against_trait<'tcx>(
1064
1067
}
1065
1068
}
1066
1069
1070
+ if !self_is_sized && tcx. generics_require_sized_self ( ty_trait_item. def_id ) {
1071
+ tcx. emit_node_span_lint (
1072
+ rustc_lint_defs:: builtin:: DEAD_CODE ,
1073
+ tcx. local_def_id_to_hir_id ( ty_impl_item. def_id . expect_local ( ) ) ,
1074
+ tcx. def_span ( ty_impl_item. def_id ) ,
1075
+ errors:: UselessImplItem ,
1076
+ )
1077
+ }
1078
+
1067
1079
check_specialization_validity (
1068
1080
tcx,
1069
1081
trait_def,
@@ -1087,7 +1099,11 @@ fn check_impl_items_against_trait<'tcx>(
1087
1099
. as_ref ( )
1088
1100
. is_some_and ( |node_item| node_item. item . defaultness ( tcx) . has_value ( ) ) ;
1089
1101
1090
- if !is_implemented && tcx. defaultness ( impl_id) . is_final ( ) {
1102
+ if !is_implemented
1103
+ && tcx. defaultness ( impl_id) . is_final ( )
1104
+ // unsized types don't need to implement methods that have `Self: Sized` bounds.
1105
+ && ( self_is_sized || !tcx. generics_require_sized_self ( trait_item_id) )
1106
+ {
1091
1107
missing_items. push ( tcx. associated_item ( trait_item_id) ) ;
1092
1108
}
1093
1109
0 commit comments