about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-02-04 05:52:44 +0000
committerbors <bors@rust-lang.org>2019-02-04 05:52:44 +0000
commit4259377ea61e4c830a49deda5be60c05a76a0a90 (patch)
treec1660674f2c26666179180cfbdadebe02e401b8a /tests
parent7bea43614cbd0d989a17fcf321f7bc0d8b641c0d (diff)
parentf3ee53d2259299e42bff3456a99def6ae3be8f84 (diff)
downloadrust-4259377ea61e4c830a49deda5be60c05a76a0a90.tar.gz
rust-4259377ea61e4c830a49deda5be60c05a76a0a90.zip
Auto merge of #3725 - mikerite:fix-2728, r=phansch
Fix `cast_sign_loss` false positive

This checks if the value is a non-negative constant before linting about
losing the sign.

Because the `constant` function doesn't handle const functions, we check if
the value is from a call to a `max_value` function directly. A utility method
called `get_def_path` was added to make checking for the function paths
easier.

Fixes #2728
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/cast.rs8
-rw-r--r--tests/ui/cast.stderr26
-rw-r--r--tests/ui/cast_size.stderr22
3 files changed, 19 insertions, 37 deletions
diff --git a/tests/ui/cast.rs b/tests/ui/cast.rs
index 5f4de9894c7..c248b5bf598 100644
--- a/tests/ui/cast.rs
+++ b/tests/ui/cast.rs
@@ -34,7 +34,15 @@ fn main() {
     (1u8 + 1u8) as u16;
     // Test clippy::cast_sign_loss
     1i32 as u32;
+    -1i32 as u32;
     1isize as usize;
+    -1isize as usize;
+    0i8 as u8;
+    i8::max_value() as u8;
+    i16::max_value() as u16;
+    i32::max_value() as u32;
+    i64::max_value() as u64;
+    i128::max_value() as u128;
     // Extra checks for *size
     // Test cast_unnecessary
     1i32 as i32;
diff --git a/tests/ui/cast.stderr b/tests/ui/cast.stderr
index 92587312a53..c01393793f1 100644
--- a/tests/ui/cast.stderr
+++ b/tests/ui/cast.stderr
@@ -70,12 +70,6 @@ error: casting i32 to i8 may truncate the value
 LL |     1i32 as i8;
    |     ^^^^^^^^^^
 
-error: casting i32 to u8 may lose the sign of the value
-  --> $DIR/cast.rs:22:5
-   |
-LL |     1i32 as u8;
-   |     ^^^^^^^^^^
-
 error: casting i32 to u8 may truncate the value
   --> $DIR/cast.rs:22:5
    |
@@ -147,19 +141,19 @@ LL |     (1u8 + 1u8) as u16;
    |     ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(1u8 + 1u8)`
 
 error: casting i32 to u32 may lose the sign of the value
-  --> $DIR/cast.rs:36:5
+  --> $DIR/cast.rs:37:5
    |
-LL |     1i32 as u32;
-   |     ^^^^^^^^^^^
+LL |     -1i32 as u32;
+   |     ^^^^^^^^^^^^
 
 error: casting isize to usize may lose the sign of the value
-  --> $DIR/cast.rs:37:5
+  --> $DIR/cast.rs:39:5
    |
-LL |     1isize as usize;
-   |     ^^^^^^^^^^^^^^^
+LL |     -1isize as usize;
+   |     ^^^^^^^^^^^^^^^^
 
 error: casting to the same type is unnecessary (`i32` -> `i32`)
-  --> $DIR/cast.rs:40:5
+  --> $DIR/cast.rs:48:5
    |
 LL |     1i32 as i32;
    |     ^^^^^^^^^^^
@@ -167,16 +161,16 @@ LL |     1i32 as i32;
    = note: `-D clippy::unnecessary-cast` implied by `-D warnings`
 
 error: casting to the same type is unnecessary (`f32` -> `f32`)
-  --> $DIR/cast.rs:41:5
+  --> $DIR/cast.rs:49:5
    |
 LL |     1f32 as f32;
    |     ^^^^^^^^^^^
 
 error: casting to the same type is unnecessary (`bool` -> `bool`)
-  --> $DIR/cast.rs:42:5
+  --> $DIR/cast.rs:50:5
    |
 LL |     false as bool;
    |     ^^^^^^^^^^^^^
 
-error: aborting due to 28 previous errors
+error: aborting due to 27 previous errors
 
diff --git a/tests/ui/cast_size.stderr b/tests/ui/cast_size.stderr
index 9346deb19ec..a77aafaf11d 100644
--- a/tests/ui/cast_size.stderr
+++ b/tests/ui/cast_size.stderr
@@ -38,14 +38,6 @@ error: casting isize to i32 may truncate the value on targets with 64-bit wide p
 LL |     1isize as i32;
    |     ^^^^^^^^^^^^^
 
-error: casting isize to u32 may lose the sign of the value
-  --> $DIR/cast_size.rs:17:5
-   |
-LL |     1isize as u32;
-   |     ^^^^^^^^^^^^^
-   |
-   = note: `-D clippy::cast-sign-loss` implied by `-D warnings`
-
 error: casting isize to u32 may truncate the value on targets with 64-bit wide pointers
   --> $DIR/cast_size.rs:17:5
    |
@@ -78,12 +70,6 @@ error: casting i64 to isize may truncate the value on targets with 32-bit wide p
 LL |     1i64 as isize;
    |     ^^^^^^^^^^^^^
 
-error: casting i64 to usize may lose the sign of the value
-  --> $DIR/cast_size.rs:22:5
-   |
-LL |     1i64 as usize;
-   |     ^^^^^^^^^^^^^
-
 error: casting i64 to usize may truncate the value on targets with 32-bit wide pointers
   --> $DIR/cast_size.rs:22:5
    |
@@ -114,11 +100,5 @@ error: casting u32 to isize may wrap around the value on targets with 32-bit wid
 LL |     1u32 as isize;
    |     ^^^^^^^^^^^^^
 
-error: casting i32 to usize may lose the sign of the value
-  --> $DIR/cast_size.rs:28:5
-   |
-LL |     1i32 as usize;
-   |     ^^^^^^^^^^^^^
-
-error: aborting due to 19 previous errors
+error: aborting due to 16 previous errors