forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#48432 - flip1995:lit_diag, r=oli-obk
Suggest type for overflowing bin/hex-literals Fixes rust-lang#48073 For hexadecimal and binary literals, which overflow, it gives an additional note to the warning message, like in this [comment](rust-lang#48073 (comment)). Additionally it will suggest a type (`X < Y`): - `iX`: if literal fits in `uX` => `uX`, else => `iY` - `-iX` => `iY` - `uX` => `uY` Exceptions: `isize`, `usize`. I don't think you can make a good suggestion here. The programmer has to figure it out on it's own in this case. r? @oli-obk
- Loading branch information
Showing
3 changed files
with
238 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
// must-compile-successfully | ||
|
||
#![feature(i128_type)] | ||
|
||
fn main() { | ||
let error = 255i8; //~WARNING literal out of range for i8 | ||
|
||
let ok = 0b1000_0001; // should be ok -> i32 | ||
let ok = 0b0111_1111i8; // should be ok -> 127i8 | ||
|
||
let fail = 0b1000_0001i8; //~WARNING literal out of range for i8 | ||
|
||
let fail = 0x8000_0000_0000_0000i64; //~WARNING literal out of range for i64 | ||
|
||
let fail = 0x1_FFFF_FFFFu32; //~WARNING literal out of range for u32 | ||
|
||
let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000; | ||
//~^ WARNING literal out of range for i128 | ||
|
||
let fail = 0x8FFF_FFFF_FFFF_FFFE; //~WARNING literal out of range for i32 | ||
|
||
let fail = -0b1111_1111i8; //~WARNING literal out of range for i8 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
warning: literal out of range for i8 | ||
--> $DIR/type-overflow.rs:16:17 | ||
| | ||
LL | let error = 255i8; //~WARNING literal out of range for i8 | ||
| ^^^^^ | ||
| | ||
= note: #[warn(overflowing_literals)] on by default | ||
|
||
warning: literal out of range for i8 | ||
--> $DIR/type-overflow.rs:21:16 | ||
| | ||
LL | let fail = 0b1000_0001i8; //~WARNING literal out of range for i8 | ||
| ^^^^^^^^^^^^^ help: consider using `u8` instead: `0b1000_0001u8` | ||
| | ||
= note: the literal `0b1000_0001i8` (decimal `129`) does not fit into an `i8` and will become `-127i8` | ||
|
||
warning: literal out of range for i64 | ||
--> $DIR/type-overflow.rs:23:16 | ||
| | ||
LL | let fail = 0x8000_0000_0000_0000i64; //~WARNING literal out of range for i64 | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `u64` instead: `0x8000_0000_0000_0000u64` | ||
| | ||
= note: the literal `0x8000_0000_0000_0000i64` (decimal `9223372036854775808`) does not fit into an `i64` and will become `-9223372036854775808i64` | ||
|
||
warning: literal out of range for u32 | ||
--> $DIR/type-overflow.rs:25:16 | ||
| | ||
LL | let fail = 0x1_FFFF_FFFFu32; //~WARNING literal out of range for u32 | ||
| ^^^^^^^^^^^^^^^^ help: consider using `u64` instead: `0x1_FFFF_FFFFu64` | ||
| | ||
= note: the literal `0x1_FFFF_FFFFu32` (decimal `8589934591`) does not fit into an `u32` and will become `4294967295u32` | ||
|
||
warning: literal out of range for i128 | ||
--> $DIR/type-overflow.rs:27:22 | ||
| | ||
LL | let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000; | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: the literal `0x8000_0000_0000_0000_0000_0000_0000_0000` (decimal `170141183460469231731687303715884105728`) does not fit into an `i128` and will become `-170141183460469231731687303715884105728i128` | ||
= help: consider using `u128` instead | ||
|
||
warning: literal out of range for i32 | ||
--> $DIR/type-overflow.rs:30:16 | ||
| | ||
LL | let fail = 0x8FFF_FFFF_FFFF_FFFE; //~WARNING literal out of range for i32 | ||
| ^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: the literal `0x8FFF_FFFF_FFFF_FFFE` (decimal `10376293541461622782`) does not fit into an `i32` and will become `-2i32` | ||
= help: consider using `i128` instead | ||
|
||
warning: literal out of range for i8 | ||
--> $DIR/type-overflow.rs:32:17 | ||
| | ||
LL | let fail = -0b1111_1111i8; //~WARNING literal out of range for i8 | ||
| ^^^^^^^^^^^^^ help: consider using `i16` instead: `0b1111_1111i16` | ||
| | ||
= note: the literal `0b1111_1111i8` (decimal `255`) does not fit into an `i8` and will become `-1i8` | ||
|