]> git.lizzy.rs Git - rust.git/commitdiff
Fix an ICE parsing a malformed literal in `concat_bytes!`.
authorNicholas Nethercote <n.nethercote@gmail.com>
Tue, 29 Nov 2022 00:50:03 +0000 (11:50 +1100)
committerNicholas Nethercote <n.nethercote@gmail.com>
Wed, 30 Nov 2022 01:19:07 +0000 (12:19 +1100)
Fixes #104769.

compiler/rustc_builtin_macros/src/concat_bytes.rs
src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.rs [new file with mode: 0644]
src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.stderr [new file with mode: 0644]

index 87658e60e9d4eb2971874c7664c4c08daf19481d..161e3499584e24cb54b5fa206d1cc02a06332d68 100644 (file)
@@ -2,6 +2,7 @@
 use rustc_ast::{ptr::P, tokenstream::TokenStream};
 use rustc_errors::Applicability;
 use rustc_expand::base::{self, DummyResult};
+use rustc_session::errors::report_lit_error;
 use rustc_span::Span;
 
 /// Emits errors for literal expressions that are invalid inside and outside of an array.
@@ -68,7 +69,10 @@ fn invalid_type_err(
         Ok(ast::LitKind::Int(_, _)) => {
             cx.span_err(span, "numeric literal is not a `u8`");
         }
-        _ => unreachable!(),
+        Ok(ast::LitKind::ByteStr(_) | ast::LitKind::Byte(_)) => unreachable!(),
+        Err(err) => {
+            report_lit_error(&cx.sess.parse_sess, err, token_lit, span);
+        }
     }
 }
 
diff --git a/src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.rs b/src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.rs
new file mode 100644 (file)
index 0000000..2415037
--- /dev/null
@@ -0,0 +1,8 @@
+#![feature(concat_bytes)]
+
+fn main() {
+    concat_bytes!(7Y);
+    //~^ ERROR invalid suffix `Y` for number literal
+    concat_bytes!(888888888888888888888888888888888888888);
+    //~^ ERROR integer literal is too large
+}
diff --git a/src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.stderr b/src/test/ui/macros/issue-104769-concat_bytes-invalid-literal.stderr
new file mode 100644 (file)
index 0000000..8d70faa
--- /dev/null
@@ -0,0 +1,16 @@
+error: invalid suffix `Y` for number literal
+  --> $DIR/issue-104769-concat_bytes-invalid-literal.rs:4:19
+   |
+LL |     concat_bytes!(7Y);
+   |                   ^^ invalid suffix `Y`
+   |
+   = help: the suffix must be one of the numeric types (`u32`, `isize`, `f32`, etc.)
+
+error: integer literal is too large
+  --> $DIR/issue-104769-concat_bytes-invalid-literal.rs:6:19
+   |
+LL |     concat_bytes!(888888888888888888888888888888888888888);
+   |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+