Rollup merge of #106361 - clubby789:int-literal-too-large, r=estebank

Note maximum integer literal for `IntLiteralTooLarge`

Closes #105908

`@rustbot` label +A-diagnostics
This commit is contained in:
Matthias Krüger 2023-01-04 07:28:56 +01:00 committed by GitHub
commit 11020b93b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 88 additions and 32 deletions

View File

@ -34,7 +34,7 @@ pub enum LitError {
InvalidIntSuffix,
InvalidFloatSuffix,
NonDecimalFloat(u32),
IntTooLarge,
IntTooLarge(u32),
}
impl LitKind {
@ -333,6 +333,6 @@ fn integer_lit(symbol: Symbol, suffix: Option<Symbol>) -> Result<LitKind, LitErr
// but these kinds of errors are already reported by the lexer.
let from_lexer =
base < 10 && s.chars().any(|c| c.to_digit(10).map_or(false, |d| d >= base));
if from_lexer { LitError::LexerError } else { LitError::IntTooLarge }
if from_lexer { LitError::LexerError } else { LitError::IntTooLarge(base) }
})
}

View File

@ -85,6 +85,7 @@ session_invalid_float_literal_suffix = invalid suffix `{$suffix}` for float lite
.help = valid suffixes are `f32` and `f64`
session_int_literal_too_large = integer literal is too large
.note = value exceeds limit of `{$limit}`
session_invalid_int_literal_width = invalid width `{$width}` for integer literal
.help = valid widths are 8, 16, 32, 64 and 128

View File

@ -260,9 +260,11 @@ pub(crate) struct InvalidFloatLiteralSuffix {
#[derive(Diagnostic)]
#[diag(session_int_literal_too_large)]
#[note]
pub(crate) struct IntLiteralTooLarge {
#[primary_span]
pub span: Span,
pub limit: String,
}
#[derive(Diagnostic)]
@ -361,8 +363,15 @@ pub fn report_lit_error(sess: &ParseSess, err: LitError, lit: token::Lit, span:
_ => unreachable!(),
};
}
LitError::IntTooLarge => {
sess.emit_err(IntLiteralTooLarge { span });
LitError::IntTooLarge(base) => {
let max = u128::MAX;
let limit = match base {
2 => format!("{max:#b}"),
8 => format!("{max:#o}"),
16 => format!("{max:#x}"),
_ => format!("{max}"),
};
sess.emit_err(IntLiteralTooLarge { span, limit });
}
}
}

View File

@ -49,6 +49,8 @@ error: integer literal is too large
|
LL | 999340282366920938463463374607431768211455999;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: aborting due to 8 previous errors

View File

@ -1,3 +1,5 @@
// ignore-tidy-linelength
fn main() {
0o1.0; //~ ERROR: octal float literal is not supported
0o2f32; //~ ERROR: octal float literal is not supported
@ -15,6 +17,12 @@ fn main() {
//~^ ERROR: integer literal is too large
9900000000000000000000000000999999999999999999999999999999;
//~^ ERROR: integer literal is too large
0b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110;
//~^ ERROR: integer literal is too large
0o37777777777777777777777777777777777777777770;
//~^ ERROR: integer literal is too large
0xffffffffffffffffffffffffffffffff0;
//~^ ERROR: integer literal is too large
0x; //~ ERROR: no valid digits
0xu32; //~ ERROR: no valid digits
0ou32; //~ ERROR: no valid digits

View File

@ -1,141 +1,169 @@
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:2:5
--> $DIR/lex-bad-numeric-literals.rs:4:5
|
LL | 0o1.0;
| ^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:4:5
--> $DIR/lex-bad-numeric-literals.rs:6:5
|
LL | 0o3.0f32;
| ^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:5:5
--> $DIR/lex-bad-numeric-literals.rs:7:5
|
LL | 0o4e4;
| ^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:6:5
--> $DIR/lex-bad-numeric-literals.rs:8:5
|
LL | 0o5.0e5;
| ^^^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:7:5
--> $DIR/lex-bad-numeric-literals.rs:9:5
|
LL | 0o6e6f32;
| ^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:8:5
--> $DIR/lex-bad-numeric-literals.rs:10:5
|
LL | 0o7.0e7f64;
| ^^^^^^^
error: hexadecimal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:9:5
--> $DIR/lex-bad-numeric-literals.rs:11:5
|
LL | 0x8.0e+9;
| ^^^^^^^^
error: hexadecimal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:10:5
--> $DIR/lex-bad-numeric-literals.rs:12:5
|
LL | 0x9.0e-9;
| ^^^^^^^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:11:5
--> $DIR/lex-bad-numeric-literals.rs:13:5
|
LL | 0o;
| ^^
error: expected at least one digit in exponent
--> $DIR/lex-bad-numeric-literals.rs:12:5
--> $DIR/lex-bad-numeric-literals.rs:14:5
|
LL | 1e+;
| ^^^
error: hexadecimal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:13:5
--> $DIR/lex-bad-numeric-literals.rs:15:5
|
LL | 0x539.0;
| ^^^^^^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:18:5
--> $DIR/lex-bad-numeric-literals.rs:26:5
|
LL | 0x;
| ^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:19:5
--> $DIR/lex-bad-numeric-literals.rs:27:5
|
LL | 0xu32;
| ^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:20:5
--> $DIR/lex-bad-numeric-literals.rs:28:5
|
LL | 0ou32;
| ^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:21:5
--> $DIR/lex-bad-numeric-literals.rs:29:5
|
LL | 0bu32;
| ^^
error[E0768]: no valid digits found for number
--> $DIR/lex-bad-numeric-literals.rs:22:5
--> $DIR/lex-bad-numeric-literals.rs:30:5
|
LL | 0b;
| ^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:24:5
--> $DIR/lex-bad-numeric-literals.rs:32:5
|
LL | 0o123.456;
| ^^^^^^^^^
error: binary float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:26:5
--> $DIR/lex-bad-numeric-literals.rs:34:5
|
LL | 0b111.101;
| ^^^^^^^^^
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:3:5
--> $DIR/lex-bad-numeric-literals.rs:5:5
|
LL | 0o2f32;
| ^^^^^^ not supported
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:14:5
|
LL | 9900000000000000000000000000999999999999999999999999999999;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:16:5
|
LL | 9900000000000000000000000000999999999999999999999999999999;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:18:5
|
LL | 9900000000000000000000000000999999999999999999999999999999;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:20:5
|
LL | 0b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111`
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:22:5
|
LL | 0o37777777777777777777777777777777777777777770;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `0o3777777777777777777777777777777777777777777`
error: integer literal is too large
--> $DIR/lex-bad-numeric-literals.rs:24:5
|
LL | 0xffffffffffffffffffffffffffffffff0;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `0xffffffffffffffffffffffffffffffff`
error: octal float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:23:5
--> $DIR/lex-bad-numeric-literals.rs:31:5
|
LL | 0o123f64;
| ^^^^^^^^ not supported
error: binary float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:25:5
--> $DIR/lex-bad-numeric-literals.rs:33:5
|
LL | 0b101f64;
| ^^^^^^^^ not supported
error: aborting due to 23 previous errors
error: aborting due to 26 previous errors
For more information about this error, try `rustc --explain E0768`.

View File

@ -11,6 +11,8 @@ error: integer literal is too large
|
LL | concat_bytes!(888888888888888888888888888888888888888);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: aborting due to 2 previous errors

View File

@ -3,6 +3,8 @@ error: integer literal is too large
|
LL | 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: aborting due to previous error

View File

@ -3,6 +3,8 @@ error: integer literal is too large
|
LL | let __isize = 340282366920938463463374607431768211456; // 2^128
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
error: aborting due to previous error

View File

@ -3,6 +3,8 @@ error: integer literal is too large
|
LL | let __isize = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff_ff;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: value exceeds limit of `0xffffffffffffffffffffffffffffffff`
error: aborting due to previous error