]> git.lizzy.rs Git - rust.git/commitdiff
Add 'consider using' message to overflowing_literals
authorCamelid <camelidcamel@gmail.com>
Sat, 12 Dec 2020 21:46:25 +0000 (13:46 -0800)
committerCamelid <camelidcamel@gmail.com>
Sat, 12 Dec 2020 22:59:35 +0000 (14:59 -0800)
Ironically, the overflowing_literals handler for binary or hex already
had this message! You would think it would be the other way around :)

compiler/rustc_lint/src/types.rs
src/test/ui/enum/enum-discrim-too-small2.stderr
src/test/ui/issues/issue-79744.rs [new file with mode: 0644]
src/test/ui/issues/issue-79744.stderr [new file with mode: 0644]
src/test/ui/lint/lint-type-limits2.stderr
src/test/ui/lint/lint-type-limits3.stderr
src/test/ui/lint/lint-type-overflow.stderr
src/test/ui/lint/lint-type-overflow2.stderr
src/test/ui/lint/type-overflow.stderr

index 9ad9d53cd0db3512205bde954f4fe049029d5718..d9f4da23d2f865fb8115c5583f2f2b4b66217cc0 100644 (file)
@@ -331,18 +331,23 @@ fn lint_int_literal<'tcx>(
         }
 
         cx.struct_span_lint(OVERFLOWING_LITERALS, e.span, |lint| {
-            lint.build(&format!("literal out of range for `{}`", t.name_str()))
-                .note(&format!(
-                    "the literal `{}` does not fit into the type `{}` whose range is `{}..={}`",
-                    cx.sess()
-                        .source_map()
-                        .span_to_snippet(lit.span)
-                        .expect("must get snippet from literal"),
-                    t.name_str(),
-                    min,
-                    max,
-                ))
-                .emit();
+            let mut err = lint.build(&format!("literal out of range for `{}`", t.name_str()));
+            err.note(&format!(
+                "the literal `{}` does not fit into the type `{}` whose range is `{}..={}`",
+                cx.sess()
+                    .source_map()
+                    .span_to_snippet(lit.span)
+                    .expect("must get snippet from literal"),
+                t.name_str(),
+                min,
+                max,
+            ));
+            if let Some(sugg_ty) =
+                get_type_suggestion(&cx.typeck_results().node_type(e.hir_id), v, negative)
+            {
+                err.help(&format!("consider using `{}` instead", sugg_ty));
+            }
+            err.emit();
         });
     }
 }
index fadf6ab86b43e0f49934377e3eec5820a120a10e..f0deb26e96db4dd3b15af50cd9327d40166a0b35 100644 (file)
@@ -10,6 +10,7 @@ note: the lint level is defined here
 LL | #![deny(overflowing_literals)]
    |         ^^^^^^^^^^^^^^^^^^^^
    = note: the literal `223` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: literal out of range for `i16`
   --> $DIR/enum-discrim-too-small2.rs:15:12
@@ -18,6 +19,7 @@ LL |     Ci16 = 55555,
    |            ^^^^^
    |
    = note: the literal `55555` does not fit into the type `i16` whose range is `-32768..=32767`
+   = help: consider using `u16` instead
 
 error: literal out of range for `i32`
   --> $DIR/enum-discrim-too-small2.rs:22:12
@@ -26,6 +28,7 @@ LL |     Ci32 = 3_000_000_000,
    |            ^^^^^^^^^^^^^
    |
    = note: the literal `3_000_000_000` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `u32` instead
 
 error: literal out of range for `i64`
   --> $DIR/enum-discrim-too-small2.rs:29:12
@@ -34,6 +37,7 @@ LL |     Ci64 = 9223372036854775809,
    |            ^^^^^^^^^^^^^^^^^^^
    |
    = note: the literal `9223372036854775809` does not fit into the type `i64` whose range is `-9223372036854775808..=9223372036854775807`
+   = help: consider using `u64` instead
 
 error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/issues/issue-79744.rs b/src/test/ui/issues/issue-79744.rs
new file mode 100644 (file)
index 0000000..49051f2
--- /dev/null
@@ -0,0 +1,13 @@
+fn main() {
+    let elem = 6i8;
+    let e2 = 230;
+    //~^ ERROR literal out of range for `i8`
+    //~| HELP consider using `u8` instead
+
+    let mut vec = Vec::new();
+
+    vec.push(e2);
+    vec.push(elem);
+
+    println!("{:?}", vec);
+}
diff --git a/src/test/ui/issues/issue-79744.stderr b/src/test/ui/issues/issue-79744.stderr
new file mode 100644 (file)
index 0000000..b35700c
--- /dev/null
@@ -0,0 +1,12 @@
+error: literal out of range for `i8`
+  --> $DIR/issue-79744.rs:3:14
+   |
+LL |     let e2 = 230;
+   |              ^^^
+   |
+   = note: `#[deny(overflowing_literals)]` on by default
+   = note: the literal `230` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
+
+error: aborting due to previous error
+
index e8746ce980a96f46ed7f348f29d6221335c149d0..357fde7151ca21b427d93786219e2f59ff636805 100644 (file)
@@ -18,6 +18,7 @@ note: the lint level is defined here
 LL | #![warn(overflowing_literals)]
    |         ^^^^^^^^^^^^^^^^^^^^
    = note: the literal `128` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: aborting due to previous error; 1 warning emitted
 
index 0e8a64510695ae2cf8b4ea9f77ccee1a6593f4e3..c8558cfc2143c8d5f17440a2beff4cf4ea4817ac 100644 (file)
@@ -18,6 +18,7 @@ note: the lint level is defined here
 LL | #![warn(overflowing_literals)]
    |         ^^^^^^^^^^^^^^^^^^^^
    = note: the literal `200` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: aborting due to previous error; 1 warning emitted
 
index 7715c0d3a4db93d8e1a1754bbb2dd2b860dba032..f0a8f507d57237486a7fcdbd74a054673de6d56a 100644 (file)
@@ -26,6 +26,7 @@ LL |     let x1: i8 = 128;
    |                  ^^^
    |
    = note: the literal `128` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:18:19
@@ -34,6 +35,7 @@ LL |     let x3: i8 = -129;
    |                   ^^^
    |
    = note: the literal `129` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `i16` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:19:19
@@ -42,6 +44,7 @@ LL |     let x3: i8 = -(129);
    |                   ^^^^^
    |
    = note: the literal `129` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `i16` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:20:20
@@ -50,6 +53,7 @@ LL |     let x3: i8 = -{129};
    |                    ^^^
    |
    = note: the literal `129` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:22:10
@@ -58,6 +62,7 @@ LL |     test(1000);
    |          ^^^^
    |
    = note: the literal `1000` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `i16` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:24:13
@@ -66,6 +71,7 @@ LL |     let x = 128_i8;
    |             ^^^^^^
    |
    = note: the literal `128_i8` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: literal out of range for `i8`
   --> $DIR/lint-type-overflow.rs:28:14
@@ -74,6 +80,7 @@ LL |     let x = -129_i8;
    |              ^^^^^^
    |
    = note: the literal `129_i8` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `i16` instead
 
 error: literal out of range for `i32`
   --> $DIR/lint-type-overflow.rs:32:18
@@ -82,6 +89,7 @@ LL |     let x: i32 = 2147483648;
    |                  ^^^^^^^^^^
    |
    = note: the literal `2147483648` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `u32` instead
 
 error: literal out of range for `i32`
   --> $DIR/lint-type-overflow.rs:33:13
@@ -90,6 +98,7 @@ LL |     let x = 2147483648_i32;
    |             ^^^^^^^^^^^^^^
    |
    = note: the literal `2147483648_i32` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `u32` instead
 
 error: literal out of range for `i32`
   --> $DIR/lint-type-overflow.rs:36:19
@@ -98,6 +107,7 @@ LL |     let x: i32 = -2147483649;
    |                   ^^^^^^^^^^
    |
    = note: the literal `2147483649` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `i64` instead
 
 error: literal out of range for `i32`
   --> $DIR/lint-type-overflow.rs:37:14
@@ -106,6 +116,7 @@ LL |     let x = -2147483649_i32;
    |              ^^^^^^^^^^^^^^
    |
    = note: the literal `2147483649_i32` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `i64` instead
 
 error: literal out of range for `i32`
   --> $DIR/lint-type-overflow.rs:38:13
@@ -114,6 +125,7 @@ LL |     let x = 2147483648;
    |             ^^^^^^^^^^
    |
    = note: the literal `2147483648` does not fit into the type `i32` whose range is `-2147483648..=2147483647`
+   = help: consider using `u32` instead
 
 error: literal out of range for `i64`
   --> $DIR/lint-type-overflow.rs:40:13
@@ -122,6 +134,7 @@ LL |     let x = 9223372036854775808_i64;
    |             ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: the literal `9223372036854775808_i64` does not fit into the type `i64` whose range is `-9223372036854775808..=9223372036854775807`
+   = help: consider using `u64` instead
 
 error: literal out of range for `i64`
   --> $DIR/lint-type-overflow.rs:42:13
@@ -130,6 +143,7 @@ LL |     let x = 18446744073709551615_i64;
    |             ^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: the literal `18446744073709551615_i64` does not fit into the type `i64` whose range is `-9223372036854775808..=9223372036854775807`
+   = help: consider using `u64` instead
 
 error: literal out of range for `i64`
   --> $DIR/lint-type-overflow.rs:43:19
@@ -138,6 +152,7 @@ LL |     let x: i64 = -9223372036854775809;
    |                   ^^^^^^^^^^^^^^^^^^^
    |
    = note: the literal `9223372036854775809` does not fit into the type `i64` whose range is `-9223372036854775808..=9223372036854775807`
+   = help: consider using `i128` instead
 
 error: literal out of range for `i64`
   --> $DIR/lint-type-overflow.rs:44:14
@@ -146,6 +161,7 @@ LL |     let x = -9223372036854775809_i64;
    |              ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: the literal `9223372036854775809_i64` does not fit into the type `i64` whose range is `-9223372036854775808..=9223372036854775807`
+   = help: consider using `i128` instead
 
 error: aborting due to 18 previous errors
 
index 0f16229a291783b8926c56959ea76e07df5021ad..ab28c4aaf477b3827ae80cc0a2c9d605a7b292e6 100644 (file)
@@ -10,6 +10,7 @@ note: the lint level is defined here
 LL | #![deny(overflowing_literals)]
    |         ^^^^^^^^^^^^^^^^^^^^
    = note: the literal `128` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 error: literal out of range for `f32`
   --> $DIR/lint-type-overflow2.rs:9:14
index 6ba8b43954d3e6999749e2ba5d4c7be3d1b77a49..dafce414d2fdfb3470a8123517fc7e772de07f84 100644 (file)
@@ -10,6 +10,7 @@ note: the lint level is defined here
 LL | #![warn(overflowing_literals)]
    |         ^^^^^^^^^^^^^^^^^^^^
    = note: the literal `255i8` does not fit into the type `i8` whose range is `-128..=127`
+   = help: consider using `u8` instead
 
 warning: literal out of range for i8
   --> $DIR/type-overflow.rs:10:16