Rollup merge of #50227 - sinkuu:ice_non_local_trait, r=estebank

Fix ICE with erroneous `impl Trait` in a trait impl

Fixes #49841.
This commit is contained in:
kennytm 2018-04-27 14:16:45 +08:00
commit 3f4e5b28b9
No known key found for this signature in database
GPG Key ID: FEF6C8051D0E013C
2 changed files with 12 additions and 2 deletions

View File

@ -732,8 +732,7 @@ fn compare_synthetic_generics<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
if impl_ty.synthetic != trait_ty.synthetic {
let impl_node_id = tcx.hir.as_local_node_id(impl_ty.def_id).unwrap();
let impl_span = tcx.hir.span(impl_node_id);
let trait_node_id = tcx.hir.as_local_node_id(trait_ty.def_id).unwrap();
let trait_span = tcx.hir.span(trait_node_id);
let trait_span = tcx.def_span(trait_ty.def_id);
let mut err = struct_span_err!(tcx.sess,
impl_span,
E0643,

View File

@ -28,4 +28,15 @@ impl Bar for () {
//~^ Error method `bar` has incompatible signature for trait
}
// With non-local trait (#49841):
use std::hash::{Hash, Hasher};
struct X;
impl Hash for X {
fn hash(&self, hasher: &mut impl Hasher) {}
//~^ Error method `hash` has incompatible signature for trait
}
fn main() {}