@@ -602,21 +602,13 @@ impl<'a> Parser<'a> {
602
602
let polarity = self . parse_polarity ( ) ;
603
603
604
604
// 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) ) ;
606
605
let ty_first = if self . token . is_keyword ( kw:: For ) && self . look_ahead ( 1 , |t| t != & token:: Lt )
607
606
{
608
607
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 {
610
609
span,
611
610
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
+ } ) ) ;
620
612
} else {
621
613
self . parse_ty_with_generics_recovery ( & generics) ?
622
614
} ;
@@ -657,6 +649,7 @@ impl<'a> Parser<'a> {
657
649
other => {
658
650
if let TyKind :: ImplTrait ( _, bounds) = other
659
651
&& let [ bound] = bounds. as_slice ( )
652
+ && let GenericBound :: Trait ( poly_trait_ref) = bound
660
653
{
661
654
// Suggest removing extra `impl` keyword:
662
655
// `impl<T: Default> impl Default for Wrapper<T>`
@@ -666,12 +659,12 @@ impl<'a> Parser<'a> {
666
659
extra_impl_kw,
667
660
impl_trait_span : ty_first. span ,
668
661
} ) ;
662
+ poly_trait_ref. trait_ref . path . clone ( )
669
663
} 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
+ ) ) ;
673
667
}
674
- err_path ( ty_first. span )
675
668
}
676
669
} ;
677
670
let trait_ref = TraitRef { path, ref_id : ty_first. id } ;
0 commit comments