diff options
| author | Matthias Krüger <476013+matthiaskrgr@users.noreply.github.com> | 2025-07-18 14:49:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-18 14:49:16 +0200 |
| commit | 499ccba8c1c1f40079ad2da19bfc01c0da563e97 (patch) | |
| tree | bfd31c9976afdefa81709aece35e09db283d2ece | |
| parent | 6caa224a242d4c7b06c317969c51862815a4454b (diff) | |
| parent | 848d4a5a381ddda172a5629d8050a58388ecb2b9 (diff) | |
| download | rust-499ccba8c1c1f40079ad2da19bfc01c0da563e97.tar.gz rust-499ccba8c1c1f40079ad2da19bfc01c0da563e97.zip | |
Rollup merge of #143280 - xizheyin:143152-1, r=compiler-errors
Remove duplicate error about raw underscore lifetime Fixes rust-lang/rust#143152 r? ```@fee1-dead```
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 14 | ||||
| -rw-r--r-- | tests/ui/underscore-lifetime/raw-underscore-lifetime.rs | 9 | ||||
| -rw-r--r-- | tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr | 8 |
3 files changed, 30 insertions, 1 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 new file mode 100644 index 00000000000..874b3d2c48d --- /dev/null +++ b/tests/ui/underscore-lifetime/raw-underscore-lifetime.rs @@ -0,0 +1,9 @@ +// This test is to ensure that the raw underscore lifetime won't emit two duplicate errors. +// See issue #143152 + +//@ edition: 2021 + +fn f<'r#_>(){} +//~^ ERROR `_` cannot be a raw lifetime + +fn main() {} diff --git a/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr b/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr new file mode 100644 index 00000000000..bdb357a47f4 --- /dev/null +++ b/tests/ui/underscore-lifetime/raw-underscore-lifetime.stderr @@ -0,0 +1,8 @@ +error: `_` cannot be a raw lifetime + --> $DIR/raw-underscore-lifetime.rs:6:6 + | +LL | fn f<'r#_>(){} + | ^^^^ + +error: aborting due to 1 previous error + |
