about summary refs log tree commit diff
path: root/compiler/rustc_parse
diff options
context:
space:
mode:
authorTheo <theo.emeriau@gmail.com>2021-09-16 21:00:11 +0200
committerTheo <theo.emeriau@gmail.com>2021-09-19 10:53:49 +0200
commit250a3e482f125e96b37d66d6d87be7b09436be5c (patch)
treeda874203a94f719a78337ba07813fba77ee83c6c /compiler/rustc_parse
parent2b5ddf36fdc784106b3a064d93dd054c32b1f10f (diff)
downloadrust-250a3e482f125e96b37d66d6d87be7b09436be5c.tar.gz
rust-250a3e482f125e96b37d66d6d87be7b09436be5c.zip
Resolve issue 85066
Fix : use struct_dummy

Fix different os messages
Diffstat (limited to 'compiler/rustc_parse')
-rw-r--r--compiler/rustc_parse/src/parser/expr.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs
index dc80dab8c6c..9216c2fe2e4 100644
--- a/compiler/rustc_parse/src/parser/expr.rs
+++ b/compiler/rustc_parse/src/parser/expr.rs
@@ -1493,6 +1493,20 @@ impl<'a> Parser<'a> {
 
     pub(super) fn parse_lit(&mut self) -> PResult<'a, Lit> {
         self.parse_opt_lit().ok_or_else(|| {
+            if let token::Interpolated(inner) = &self.token.kind {
+                let expr = match inner.as_ref() {
+                    token::NtExpr(expr) => Some(expr),
+                    token::NtLiteral(expr) => Some(expr),
+                    _ => None,
+                };
+                if let Some(expr) = expr {
+                    if matches!(expr.kind, ExprKind::Err) {
+                        self.diagnostic()
+                            .delay_span_bug(self.token.span, &"invalid interpolated expression");
+                        return self.diagnostic().struct_dummy();
+                    }
+                }
+            }
             let msg = format!("unexpected token: {}", super::token_descr(&self.token));
             self.struct_span_err(self.token.span, &msg)
         })