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:
commit
11020b93b6
10 changed files with 88 additions and 32 deletions
|
@ -34,7 +34,7 @@ pub enum LitError {
|
||||||
InvalidIntSuffix,
|
InvalidIntSuffix,
|
||||||
InvalidFloatSuffix,
|
InvalidFloatSuffix,
|
||||||
NonDecimalFloat(u32),
|
NonDecimalFloat(u32),
|
||||||
IntTooLarge,
|
IntTooLarge(u32),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LitKind {
|
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.
|
// but these kinds of errors are already reported by the lexer.
|
||||||
let from_lexer =
|
let from_lexer =
|
||||||
base < 10 && s.chars().any(|c| c.to_digit(10).map_or(false, |d| d >= base));
|
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) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ session_invalid_float_literal_suffix = invalid suffix `{$suffix}` for float lite
|
||||||
.help = valid suffixes are `f32` and `f64`
|
.help = valid suffixes are `f32` and `f64`
|
||||||
|
|
||||||
session_int_literal_too_large = integer literal is too large
|
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
|
session_invalid_int_literal_width = invalid width `{$width}` for integer literal
|
||||||
.help = valid widths are 8, 16, 32, 64 and 128
|
.help = valid widths are 8, 16, 32, 64 and 128
|
||||||
|
|
|
@ -260,9 +260,11 @@ pub(crate) struct InvalidFloatLiteralSuffix {
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(session_int_literal_too_large)]
|
#[diag(session_int_literal_too_large)]
|
||||||
|
#[note]
|
||||||
pub(crate) struct IntLiteralTooLarge {
|
pub(crate) struct IntLiteralTooLarge {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
|
pub limit: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
|
@ -361,8 +363,15 @@ pub fn report_lit_error(sess: &ParseSess, err: LitError, lit: token::Lit, span:
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
LitError::IntTooLarge => {
|
LitError::IntTooLarge(base) => {
|
||||||
sess.emit_err(IntLiteralTooLarge { span });
|
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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ error: integer literal is too large
|
||||||
|
|
|
|
||||||
LL | 999340282366920938463463374607431768211455999;
|
LL | 999340282366920938463463374607431768211455999;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
|
||||||
|
|
||||||
error: aborting due to 8 previous errors
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
0o1.0; //~ ERROR: octal float literal is not supported
|
0o1.0; //~ ERROR: octal float literal is not supported
|
||||||
0o2f32; //~ 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
|
//~^ ERROR: integer literal is too large
|
||||||
9900000000000000000000000000999999999999999999999999999999;
|
9900000000000000000000000000999999999999999999999999999999;
|
||||||
//~^ ERROR: integer literal is too large
|
//~^ 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
|
0x; //~ ERROR: no valid digits
|
||||||
0xu32; //~ ERROR: no valid digits
|
0xu32; //~ ERROR: no valid digits
|
||||||
0ou32; //~ ERROR: no valid digits
|
0ou32; //~ ERROR: no valid digits
|
||||||
|
|
|
@ -1,141 +1,169 @@
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o1.0;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o3.0f32;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o4e4;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o5.0e5;
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o6e6f32;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o7.0e7f64;
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: hexadecimal float literal is not supported
|
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;
|
LL | 0x8.0e+9;
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error: hexadecimal float literal is not supported
|
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;
|
LL | 0x9.0e-9;
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0o;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: expected at least one digit in exponent
|
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+;
|
LL | 1e+;
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
||||||
error: hexadecimal float literal is not supported
|
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;
|
LL | 0x539.0;
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0x;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0xu32;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0ou32;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0bu32;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0768]: no valid digits found for number
|
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;
|
LL | 0b;
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o123.456;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: binary float literal is not supported
|
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;
|
LL | 0b111.101;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: octal float literal is not supported
|
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;
|
LL | 0o2f32;
|
||||||
| ^^^^^^ not supported
|
| ^^^^^^ not supported
|
||||||
|
|
||||||
error: integer literal is too large
|
|
||||||
--> $DIR/lex-bad-numeric-literals.rs:14:5
|
|
||||||
|
|
|
||||||
LL | 9900000000000000000000000000999999999999999999999999999999;
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: integer literal is too large
|
error: integer literal is too large
|
||||||
--> $DIR/lex-bad-numeric-literals.rs:16:5
|
--> $DIR/lex-bad-numeric-literals.rs:16:5
|
||||||
|
|
|
|
||||||
LL | 9900000000000000000000000000999999999999999999999999999999;
|
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
|
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;
|
LL | 0o123f64;
|
||||||
| ^^^^^^^^ not supported
|
| ^^^^^^^^ not supported
|
||||||
|
|
||||||
error: binary float literal is 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;
|
LL | 0b101f64;
|
||||||
| ^^^^^^^^ not supported
|
| ^^^^^^^^ 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`.
|
For more information about this error, try `rustc --explain E0768`.
|
||||||
|
|
|
@ -11,6 +11,8 @@ error: integer literal is too large
|
||||||
|
|
|
|
||||||
LL | concat_bytes!(888888888888888888888888888888888888888);
|
LL | concat_bytes!(888888888888888888888888888888888888888);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ error: integer literal is too large
|
||||||
|
|
|
|
||||||
LL | 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
LL | 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ error: integer literal is too large
|
||||||
|
|
|
|
||||||
LL | let __isize = 340282366920938463463374607431768211456; // 2^128
|
LL | let __isize = 340282366920938463463374607431768211456; // 2^128
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: value exceeds limit of `340282366920938463463374607431768211455`
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ error: integer literal is too large
|
||||||
|
|
|
|
||||||
LL | let __isize = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff_ff;
|
LL | let __isize = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff_ff;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: value exceeds limit of `0xffffffffffffffffffffffffffffffff`
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue