@@ -117,7 +117,7 @@ enum ResolutionError<'a> {
117
117
/// error E0408: variable `{}` from pattern #{} is not bound in pattern #{}
118
118
VariableNotBoundInPattern ( Name , usize , usize ) ,
119
119
/// error E0409: variable is bound with different mode in pattern #{} than in pattern #1
120
- VariableBoundWithDifferentMode ( Name , usize ) ,
120
+ VariableBoundWithDifferentMode ( Name , usize , Span ) ,
121
121
/// error E0411: use of `Self` outside of an impl or trait
122
122
SelfUsedOutsideImplOrTrait ,
123
123
/// error E0412: use of undeclared
@@ -270,14 +270,19 @@ fn resolve_struct_error<'b, 'a: 'b, 'c>(resolver: &'b Resolver<'a>,
270
270
from,
271
271
to)
272
272
}
273
- ResolutionError :: VariableBoundWithDifferentMode ( variable_name, pattern_number) => {
274
- struct_span_err ! ( resolver. session,
273
+ ResolutionError :: VariableBoundWithDifferentMode ( variable_name,
274
+ pattern_number,
275
+ first_binding_span) => {
276
+ let mut err = struct_span_err ! ( resolver. session,
275
277
span,
276
278
E0409 ,
277
279
"variable `{}` is bound with different mode in pattern #{} than in \
278
280
pattern #1",
279
281
variable_name,
280
- pattern_number)
282
+ pattern_number) ;
283
+ err. span_label ( span, & format ! ( "bound in different ways" ) ) ;
284
+ err. span_label ( first_binding_span, & format ! ( "first binding" ) ) ;
285
+ err
281
286
}
282
287
ResolutionError :: SelfUsedOutsideImplOrTrait => {
283
288
let mut err = struct_span_err ! ( resolver. session,
@@ -2044,8 +2049,10 @@ impl<'a> Resolver<'a> {
2044
2049
if binding_0. binding_mode != binding_i. binding_mode {
2045
2050
resolve_error ( self ,
2046
2051
binding_i. span ,
2047
- ResolutionError :: VariableBoundWithDifferentMode ( key. name ,
2048
- i + 1 ) ) ;
2052
+ ResolutionError :: VariableBoundWithDifferentMode (
2053
+ key. name ,
2054
+ i + 1 ,
2055
+ binding_0. span ) ) ;
2049
2056
}
2050
2057
}
2051
2058
}
0 commit comments