mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-03 02:23:20 +00:00
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
@ -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) }
|
||||
})
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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`.
|
||||
|
@ -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
|
||||
|
||||
|
@ -3,6 +3,8 @@ error: integer literal is too large
|
||||
|
|
||||
LL | 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: value exceeds limit of `340282366920938463463374607431768211455`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user