1
Fork 0

Rollup merge of #105078 - TaKO8Ki:fix-105011, r=nnethercote

Fix `expr_to_spanned_string` ICE

Fixes #105011
This commit is contained in:
Matthias Krüger 2022-12-01 11:58:59 +01:00 committed by GitHub
commit 741f8c9166
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 8 deletions

View file

@ -16,6 +16,7 @@ use rustc_errors::{
use rustc_lint_defs::builtin::PROC_MACRO_BACK_COMPAT; use rustc_lint_defs::builtin::PROC_MACRO_BACK_COMPAT;
use rustc_lint_defs::{BufferedEarlyLint, BuiltinLintDiagnostics}; use rustc_lint_defs::{BufferedEarlyLint, BuiltinLintDiagnostics};
use rustc_parse::{self, parser, MACRO_ARGUMENTS}; use rustc_parse::{self, parser, MACRO_ARGUMENTS};
use rustc_session::errors::report_lit_error;
use rustc_session::{parse::ParseSess, Limit, Session}; use rustc_session::{parse::ParseSess, Limit, Session};
use rustc_span::def_id::{CrateNum, DefId, LocalDefId}; use rustc_span::def_id::{CrateNum, DefId, LocalDefId};
use rustc_span::edition::Edition; use rustc_span::edition::Edition;
@ -1245,7 +1246,10 @@ pub fn expr_to_spanned_string<'a>(
Some((err, true)) Some((err, true))
} }
Ok(ast::LitKind::Err) => None, Ok(ast::LitKind::Err) => None,
Err(_) => None, Err(err) => {
report_lit_error(&cx.sess.parse_sess, err, token_lit, expr.span);
None
}
_ => Some((cx.struct_span_err(expr.span, err_msg), false)), _ => Some((cx.struct_span_err(expr.span, err_msg), false)),
}, },
ast::ExprKind::Err => None, ast::ExprKind::Err => None,

View file

@ -197,12 +197,12 @@ pub enum UnleashedFeatureHelp {
#[derive(Diagnostic)] #[derive(Diagnostic)]
#[diag(session_invalid_literal_suffix)] #[diag(session_invalid_literal_suffix)]
pub(crate) struct InvalidLiteralSuffix { pub(crate) struct InvalidLiteralSuffix<'a> {
#[primary_span] #[primary_span]
#[label] #[label]
pub span: Span, pub span: Span,
// FIXME(#100717) // FIXME(#100717)
pub kind: String, pub kind: &'a str,
pub suffix: Symbol, pub suffix: Symbol,
} }
@ -311,11 +311,7 @@ pub fn report_lit_error(sess: &ParseSess, err: LitError, lit: token::Lit, span:
LitError::LexerError => {} LitError::LexerError => {}
LitError::InvalidSuffix => { LitError::InvalidSuffix => {
if let Some(suffix) = suffix { if let Some(suffix) = suffix {
sess.emit_err(InvalidLiteralSuffix { sess.emit_err(InvalidLiteralSuffix { span, kind: kind.descr(), suffix });
span,
kind: format!("{}", kind.descr()),
suffix,
});
} }
} }
LitError::InvalidIntSuffix => { LitError::InvalidIntSuffix => {

View file

@ -0,0 +1,3 @@
fn main() {
println!(""y); //~ ERROR suffixes on string literals are invalid
}

View file

@ -0,0 +1,8 @@
error: suffixes on string literals are invalid
--> $DIR/issue-105011.rs:2:14
|
LL | println!(""y);
| ^^^ invalid suffix `y`
error: aborting due to previous error