Fix overflows in the implementation of overflowing_literals
lint's help
#135249
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes two overflow problems that cause the
overflowing_literals
lint to behave incorrectly in some edge cases.i128::MAX
andu128::MAX
, an overflowingas
cast can cause the suggested type to be overly small (Wrong type suggested foroverflowing_literals
when the number is big #135248). It's fixed by using checked type conversion and returningu128
when it's the only choice.i128::MIN
but is of a smaller type, an overflowing negation cause the compiler to panic in debug build (ICE:attempt to negate with overflow
#131849). Fixed by checking the number size beforehand andwrapping_neg
.Edit: extracted the type conversion part into a standalone function to separate the concern of overflowing.