diff options
| author | Michael Goulet <michael@errs.io> | 2024-10-30 14:45:17 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-10-30 14:45:22 +0000 |
| commit | 9785c7cf94f5e30742f886764f2d25b6a4da66e8 (patch) | |
| tree | d3b2f34b5bf6097816390fa8ce319dd14218c44e /compiler/rustc_parse/src/lexer/mod.rs | |
| parent | 1e4f10ba6476e48a42a79b9f846a2d9366525b9e (diff) | |
| download | rust-9785c7cf94f5e30742f886764f2d25b6a4da66e8.tar.gz rust-9785c7cf94f5e30742f886764f2d25b6a4da66e8.zip | |
Enforce that raw lifetime identifiers must be valid raw identifiers
Diffstat (limited to 'compiler/rustc_parse/src/lexer/mod.rs')
| -rw-r--r-- | compiler/rustc_parse/src/lexer/mod.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs index d627ef3d2cb..226de65445c 100644 --- a/compiler/rustc_parse/src/lexer/mod.rs +++ b/compiler/rustc_parse/src/lexer/mod.rs @@ -294,15 +294,21 @@ impl<'psess, 'src> StringReader<'psess, 'src> { let prefix_span = self.mk_sp(start, ident_start); if prefix_span.at_least_rust_2021() { - let lifetime_name_without_tick = self.str_from(ident_start); + let span = self.mk_sp(start, self.pos); + + let lifetime_name_without_tick = Symbol::intern(&self.str_from(ident_start)); + if !lifetime_name_without_tick.can_be_raw() { + self.dcx().emit_err(errors::CannotBeRawLifetime { span, ident: lifetime_name_without_tick }); + } + // Put the `'` back onto the lifetime name. - let mut lifetime_name = String::with_capacity(lifetime_name_without_tick.len() + 1); + let mut lifetime_name = String::with_capacity(lifetime_name_without_tick.as_str().len() + 1); lifetime_name.push('\''); - lifetime_name += lifetime_name_without_tick; + lifetime_name += lifetime_name_without_tick.as_str(); let sym = Symbol::intern(&lifetime_name); // Make sure we mark this as a raw identifier. - self.psess.raw_identifier_spans.push(self.mk_sp(start, self.pos)); + self.psess.raw_identifier_spans.push(span); token::Lifetime(sym, IdentIsRaw::Yes) } else { |
