Fixes missing overflow lint for i64 #14269
The `type_overflow` lint, doesn't catch the overflow for `i64` because the overflow happens earlier in the parse phase when the `u64` as biggest possible int gets casted to `i64` , without checking the for overflows. We can't lint in the parse phase, so a refactoring of the `LitInt` type was necessary. The types `LitInt`, `LitUint` and `LitIntUnsuffixed` where merged to one type `LitInt` which stores it's value as `u64`. An additional parameter was added which indicate the signedness of the type and the sign of the value.
This commit is contained in:
parent
795f6ae829
commit
0dc215741b
18 changed files with 142 additions and 99 deletions
|
@ -1947,8 +1947,6 @@ fn lit_to_string(lit: &ast::Lit) -> String {
|
|||
},
|
||||
ast::LitChar(c) => format!("'{}'", c),
|
||||
ast::LitInt(i, _t) => i.to_string(),
|
||||
ast::LitUint(u, _t) => u.to_string(),
|
||||
ast::LitIntUnsuffixed(i) => i.to_string(),
|
||||
ast::LitFloat(ref f, _t) => f.get().to_string(),
|
||||
ast::LitFloatUnsuffixed(ref f) => f.get().to_string(),
|
||||
ast::LitBool(b) => b.to_string(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue