Skip to content

Commit 3acfe03

Browse files
author
Nick Hamann
committed
Only report Self: Sized violation once.
Fixes rust-lang#20692.
1 parent b70f49b commit 3acfe03

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/librustc/middle/traits/object_safety.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,15 @@ pub fn object_safety_violations<'tcx>(tcx: &ty::ctxt<'tcx>,
7979
trait_def_id: ast::DefId)
8080
-> Vec<ObjectSafetyViolation<'tcx>>
8181
{
82-
traits::supertrait_def_ids(tcx, trait_def_id)
82+
let mut violations: Vec<_> = traits::supertrait_def_ids(tcx, trait_def_id)
8383
.flat_map(|def_id| object_safety_violations_for_trait(tcx, def_id).into_iter())
84-
.collect()
84+
.collect();
85+
86+
if trait_has_sized_self(tcx, trait_def_id) {
87+
violations.push(ObjectSafetyViolation::SizedSelf);
88+
}
89+
90+
violations
8591
}
8692

8793
fn object_safety_violations_for_trait<'tcx>(tcx: &ty::ctxt<'tcx>,
@@ -104,9 +110,6 @@ fn object_safety_violations_for_trait<'tcx>(tcx: &ty::ctxt<'tcx>,
104110
.collect();
105111

106112
// Check the trait itself.
107-
if trait_has_sized_self(tcx, trait_def_id) {
108-
violations.push(ObjectSafetyViolation::SizedSelf);
109-
}
110113
if supertraits_reference_self(tcx, trait_def_id) {
111114
violations.push(ObjectSafetyViolation::SupertraitSelf);
112115
}

0 commit comments

Comments
 (0)