diff options
| author | varkor <github@varkor.com> | 2019-04-27 13:26:06 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2019-04-30 22:43:51 +0100 |
| commit | 0556e4891ef6e73ee886526cd39d4887850b1a1a (patch) | |
| tree | 6f5421006a24e8d004dd66adbc519f89690aa84d | |
| parent | 218982bef07c7d8518348f5d2a2eecf57edc0219 (diff) | |
| download | rust-0556e4891ef6e73ee886526cd39d4887850b1a1a.tar.gz rust-0556e4891ef6e73ee886526cd39d4887850b1a1a.zip | |
Preserve literal suffixes
| -rw-r--r-- | src/librustc_lint/types.rs | 18 | ||||
| -rw-r--r-- | src/test/ui/lint/lint-range-endpoint-overflow.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/lint/lint-range-endpoint-overflow.stderr | 8 |
3 files changed, 25 insertions, 2 deletions
diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index d3b0b1169bf..3b3e2455fa7 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -172,10 +172,26 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TypeLimits { if let Ok(start) = cx.sess().source_map() .span_to_snippet(eps[0].span) { + use ast::{LitKind::*, LitIntType}; + // We need to preserve the literal's suffix, + // as it may determine typing information. + let suffix = match lit.node { + Int(_, LitIntType::Signed(s)) => { + format!("{}", s) + } + Int(_, LitIntType::Unsigned(s)) => { + format!("{}", s) + } + Int(_, LitIntType::Unsuffixed) => { + "".to_owned() + } + _ => bug!(), + }; let suggestion = format!( - "{}..={}", + "{}..={}{}", start, lit_val - 1, + suffix, ); err.span_suggestion( parent_expr.span, diff --git a/src/test/ui/lint/lint-range-endpoint-overflow.rs b/src/test/ui/lint/lint-range-endpoint-overflow.rs index f2aeb24a795..5d7430007ab 100644 --- a/src/test/ui/lint/lint-range-endpoint-overflow.rs +++ b/src/test/ui/lint/lint-range-endpoint-overflow.rs @@ -6,6 +6,7 @@ fn main() { let range_c = 0..=256; //~ ERROR literal out of range for `u8` let range_d = 256..5; //~ ERROR literal out of range for `u8` let range_e = 0..257; //~ ERROR literal out of range for `u8` + let _range_f = 0..256u8; //~ ERROR range endpoint is out of range for `u8` range_a.collect::<Vec<u8>>(); range_b.collect::<Vec<u8>>(); diff --git a/src/test/ui/lint/lint-range-endpoint-overflow.stderr b/src/test/ui/lint/lint-range-endpoint-overflow.stderr index b2dff2c8d05..72f548cf4ad 100644 --- a/src/test/ui/lint/lint-range-endpoint-overflow.stderr +++ b/src/test/ui/lint/lint-range-endpoint-overflow.stderr @@ -28,5 +28,11 @@ error: literal out of range for `u8` LL | let range_e = 0..257; | ^^^ -error: aborting due to 4 previous errors +error: range endpoint is out of range for `u8` + --> $DIR/lint-range-endpoint-overflow.rs:9:20 + | +LL | let _range_f = 0..256u8; + | ^^^^^^^^ help: use an inclusive range instead: `0..=255u8` + +error: aborting due to 5 previous errors |
