diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs index 6383ca69fe5ca..f8030fa6ec7a8 100644 --- a/src/librustc_lint/unused.rs +++ b/src/librustc_lint/unused.rs @@ -66,9 +66,22 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedResults { } else { match t.sty { ty::Adt(def, _) => check_must_use(cx, def.did, s.span, ""), + ty::Opaque(def, _) => { + let mut must_use = false; + for (predicate, _) in cx.tcx.predicates_of(def).predicates { + if let ty::Predicate::Trait(ref poly_trait_predicate) = predicate { + let trait_ref = poly_trait_predicate.skip_binder().trait_ref; + if check_must_use(cx, trait_ref.def_id, s.span, "implementer of ") { + must_use = true; + break; + } + } + } + must_use + } _ => false, } - } + }; let mut fn_warned = false; let mut op_warned = false;