Auto merge of #3931 - phansch:3891, r=flip1995
Fix ICE in decimal_literal_representation lint 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. Fixes #3891 [compiletest_issue]: https://github.com/laumann/compiletest-rs/issues/169
This commit is contained in:
commit
2278814c8e
|
@ -59,7 +59,9 @@ rustup override set nightly
|
||||||
# avoid loop spam and allow cmds with exit status != 0
|
# avoid loop spam and allow cmds with exit status != 0
|
||||||
set +ex
|
set +ex
|
||||||
|
|
||||||
for file in `find tests | grep "\.rs$"` ; do
|
# Excluding `ice-3891.rs` because the code triggers a rustc parse error which
|
||||||
|
# makes rustfmt fail.
|
||||||
|
for file in `find tests -not -path "tests/ui/crashes/ice-3891.rs" | grep "\.rs$"` ; do
|
||||||
rustfmt ${file} --check
|
rustfmt ${file} --check
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "${file} needs reformatting!"
|
echo "${file} needs reformatting!"
|
||||||
|
|
|
@ -526,23 +526,20 @@ impl LiteralRepresentation {
|
||||||
if let Some(src) = snippet_opt(cx, lit.span);
|
if let Some(src) = snippet_opt(cx, lit.span);
|
||||||
if let Some(firstch) = src.chars().next();
|
if let Some(firstch) = src.chars().next();
|
||||||
if char::to_digit(firstch, 10).is_some();
|
if char::to_digit(firstch, 10).is_some();
|
||||||
|
let digit_info = DigitInfo::new(&src, false);
|
||||||
|
if digit_info.radix == Radix::Decimal;
|
||||||
|
if let Ok(val) = digit_info.digits
|
||||||
|
.chars()
|
||||||
|
.filter(|&c| c != '_')
|
||||||
|
.collect::<String>()
|
||||||
|
.parse::<u128>();
|
||||||
|
if val >= u128::from(self.threshold);
|
||||||
then {
|
then {
|
||||||
let digit_info = DigitInfo::new(&src, false);
|
let hex = format!("{:#X}", val);
|
||||||
if digit_info.radix == Radix::Decimal {
|
let digit_info = DigitInfo::new(&hex, false);
|
||||||
let val = digit_info.digits
|
let _ = Self::do_lint(digit_info.digits).map_err(|warning_type| {
|
||||||
.chars()
|
warning_type.display(&digit_info.grouping_hint(), cx, lit.span)
|
||||||
.filter(|&c| c != '_')
|
});
|
||||||
.collect::<String>()
|
|
||||||
.parse::<u128>().unwrap();
|
|
||||||
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)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
tests/ui/crashes/ice-3891.rs
Normal file
3
tests/ui/crashes/ice-3891.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
1x;
|
||||||
|
}
|
10
tests/ui/crashes/ice-3891.stderr
Normal file
10
tests/ui/crashes/ice-3891.stderr
Normal file
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue