diff options
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 14 | ||||
| -rw-r--r-- | tests/ui/underscore-lifetime/raw-underscore-lifetime.rs | 1 | ||||
| -rw-r--r-- | tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr | 9 |
3 files changed, 14 insertions, 10 deletions
diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 753b9365cd8..93cec8daa5a 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -2899,9 +2899,21 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> { } if param.ident.name == kw::UnderscoreLifetime { + // To avoid emitting two similar errors, + // we need to check if the span is a raw underscore lifetime, see issue #143152 + let is_raw_underscore_lifetime = self + .r + .tcx + .sess + .psess + .raw_identifier_spans + .iter() + .any(|span| span == param.span()); + self.r .dcx() - .emit_err(errors::UnderscoreLifetimeIsReserved { span: param.ident.span }); + .create_err(errors::UnderscoreLifetimeIsReserved { span: param.ident.span }) + .emit_unless(is_raw_underscore_lifetime); // Record lifetime res, so lowering knows there is something fishy. self.record_lifetime_param(param.id, LifetimeRes::Error); continue; diff --git a/tests/ui/underscore-lifetime/raw-underscore-lifetime.rs b/tests/ui/underscore-lifetime/raw-underscore-lifetime.rs index 9ab040f2eab..874b3d2c48d 100644 --- a/tests/ui/underscore-lifetime/raw-underscore-lifetime.rs +++ b/tests/ui/underscore-lifetime/raw-underscore-lifetime.rs @@ -5,6 +5,5 @@ fn f<'r#_>(){} //~^ ERROR `_` cannot be a raw lifetime -//~| ERROR `'_` cannot be used here [E0637] fn main() {} diff --git a/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr b/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr index 39627d8a476..bdb357a47f4 100644 --- a/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr +++ b/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr @@ -4,12 +4,5 @@ error: `_` cannot be a raw lifetime LL | fn f<'r#_>(){} | ^^^^ -error[E0637]: `'_` cannot be used here - --> $DIR/raw-underscore-lifetime.rs:6:6 - | -LL | fn f<'r#_>(){} - | ^^^^ `'_` is a reserved lifetime name - -error: aborting due to 2 previous errors +error: aborting due to 1 previous error -For more information about this error, try `rustc --explain E0637`. |
