@@ -602,21 +602,13 @@ impl<'a> Parser<'a> {
602602 let polarity = self . parse_polarity ( ) ;
603603
604604 // Parse both types and traits as a type, then reinterpret if necessary.
605- let err_path = |span| ast:: Path :: from_ident ( Ident :: new ( kw:: Empty , span) ) ;
606605 let ty_first = if self . token . is_keyword ( kw:: For ) && self . look_ahead ( 1 , |t| t != & token:: Lt )
607606 {
608607 let span = self . prev_token . span . between ( self . token . span ) ;
609- self . dcx ( ) . emit_err ( errors:: MissingTraitInTraitImpl {
608+ return Err ( self . dcx ( ) . create_err ( errors:: MissingTraitInTraitImpl {
610609 span,
611610 for_span : span. to ( self . token . span ) ,
612- } ) ;
613-
614- P ( Ty {
615- kind : TyKind :: Path ( None , err_path ( span) ) ,
616- span,
617- id : DUMMY_NODE_ID ,
618- tokens : None ,
619- } )
611+ } ) ) ;
620612 } else {
621613 self . parse_ty_with_generics_recovery ( & generics) ?
622614 } ;
@@ -657,6 +649,7 @@ impl<'a> Parser<'a> {
657649 other => {
658650 if let TyKind :: ImplTrait ( _, bounds) = other
659651 && let [ bound] = bounds. as_slice ( )
652+ && let GenericBound :: Trait ( poly_trait_ref) = bound
660653 {
661654 // Suggest removing extra `impl` keyword:
662655 // `impl<T: Default> impl Default for Wrapper<T>`
@@ -666,12 +659,12 @@ impl<'a> Parser<'a> {
666659 extra_impl_kw,
667660 impl_trait_span : ty_first. span ,
668661 } ) ;
662+ poly_trait_ref. trait_ref . path . clone ( )
669663 } else {
670- self . dcx ( ) . emit_err ( errors :: ExpectedTraitInTraitImplFoundType {
671- span : ty_first. span ,
672- } ) ;
664+ return Err ( self . dcx ( ) . create_err (
665+ errors :: ExpectedTraitInTraitImplFoundType { span : ty_first. span } ,
666+ ) ) ;
673667 }
674- err_path ( ty_first. span )
675668 }
676669 } ;
677670 let trait_ref = TraitRef { path, ref_id : ty_first. id } ;
0 commit comments