Skip to content

Commit

Permalink
Fix ICE in decimal_literal_representation lint
Browse files Browse the repository at this point in the history
Handling the integer parsing properly instead of just unwrapping.

Note that the test is not catching the ICE because plain UI tests
[currently hide ICEs][compiletest_issue]. Once that issue is fixed, this
test would fail properly again.

[compiletest_issue]: Manishearth/compiletest-rs#169
  • Loading branch information
phansch committed Apr 8, 2019
1 parent 949f584 commit 0307ff0
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
22 changes: 13 additions & 9 deletions clippy_lints/src/literal_representation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -529,19 +529,23 @@ impl LiteralRepresentation {
then {
let digit_info = DigitInfo::new(&src, false);
if digit_info.radix == Radix::Decimal {
let val = digit_info.digits
if let Ok(val) = digit_info.digits
.chars()
.filter(|&c| c != '_')
.collect::<String>()
.parse::<u128>().unwrap();
if val < u128::from(self.threshold) {
return
.parse::<u128>() {
if val < u128::from(self.threshold) {
return
}
let hex = format!("{:#X}", val);
let digit_info = DigitInfo::new(&hex[..], false);
let _ = Self::do_lint(digit_info.digits).map_err(|warning_type| {
warning_type.display(&digit_info.grouping_hint(), cx, lit.span)
});
}
let hex = format!("{:#X}", val);
let digit_info = DigitInfo::new(&hex[..], false);
let _ = Self::do_lint(digit_info.digits).map_err(|warning_type| {
warning_type.display(&digit_info.grouping_hint(), cx, lit.span)
});
else {
return
};
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions tests/ui/crashes/ice-3891.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() {
1x;
}
10 changes: 10 additions & 0 deletions tests/ui/crashes/ice-3891.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
error: invalid suffix `x` for numeric literal
--> $DIR/ice-3891.rs:2:5
|
LL | 1x;
| ^^ invalid suffix `x`
|
= help: the suffix must be one of the integral types (`u32`, `isize`, etc)

error: aborting due to previous error

0 comments on commit 0307ff0

Please sign in to comment.