Skip to content

assertions_on_result_state changes type #9916

@matthiaskrgr

Description

@matthiaskrgr

Summary

.

Lint Name

assertions_on_result_state

Reproducer

I tried this code:

use std::process::{Command};
use std::panic;

fn a(argc: isize, argv: *const *const u8) -> isize {
    if argc > 1 {
        unsafe {
            match **argv.offset(1) as char {
                '1' => {}
                '2' => println!("foo"),
                '3' => assert!(panic::catch_unwind(|| {}).is_ok()),
                '4' => assert!(panic::catch_unwind(|| panic!()).is_err()),
                '5' => assert!(Command::new("test").spawn().is_err()),
                _ => panic!()
            }
        }
        return 0
    }

    0
}

pub fn main() {}

I saw this happen:
cargo clippy --fix -- -Aclippy::all -Wclippy::assertions_on_result_states

    Checking clpy v0.1.0 (/tmp/clpy)
warning: failed to automatically apply fixes suggested by rustc to crate `clpy`

after fixes were automatically applied the compiler reported errors within these files:

  * /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/macros.rs
  * src/main.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/rust/issues
quoting the full output of this command we'd be very appreciative!
Note that you may be able to make some more progress in the near-term
fixing code with the `--broken-code` flag

The following errors were reported:
error[E0308]: `match` arms have incompatible types
  --> src/main.rs:14:24
   |
9  | /             match **argv.offset(1) as char {
10 | |                 '1' => {}
   | |                        -- this is found to be of type `()`
11 | |                 '2' => println!("foo"),
   | |                        --------------- this is found to be of type `()`
12 | |                 '3' => panic::catch_unwind(|| {}).unwrap(),
   | |                        ----------------------------------- this is found to be of type `()`
13 | |                 '4' => assert!(panic::catch_unwind(|| panic!()).is_err()),
   | |                        -------------------------------------------------- this is found to be of type `()`
14 | |                 '5' => Command::new("test").spawn().unwrap_err(),
   | |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found struct `std::io::Error`
15 | |                 _ => panic!()
16 | |             }
   | |_____________- `match` arms have incompatible types

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
Original diagnostics will follow.

warning: function `a` is never used
 --> src/main.rs:6:4
  |
6 | fn a(argc: isize, argv: *const *const u8) -> isize {
  |    ^
  |
  = note: `#[warn(dead_code)]` on by default

warning: called `assert!` with `Result::is_ok`
  --> src/main.rs:12:24
   |
12 |                 '3' => assert!(panic::catch_unwind(|| {}).is_ok()),
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `panic::catch_unwind(|| {}).unwrap()`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_result_states
   = note: requested on the command line with `-W clippy::assertions-on-result-states`

warning: called `assert!` with `Result::is_err`
  --> src/main.rs:14:24
   |
14 |                 '5' => assert!(Command::new("test").spawn().is_err()),
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `Command::new("test").spawn().unwrap_err()`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_result_states

warning: `clpy` (bin "clpy") generated 3 warnings (run `cargo fix --bin "clpy"` to apply 2 suggestions)
warning: `clpy` (bin "clpy" test) generated 3 warnings (3 duplicates)
    Finished dev [unoptimized + debuginfo] target(s) in 0.68s

I expected to see this happen:

Version

rustc 1.67.0-nightly (c5d82ed7a 2022-11-19)
binary: rustc
commit-hash: c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b
commit-date: 2022-11-19
host: x86_64-unknown-linux-gnu
release: 1.67.0-nightly
LLVM version: 15.0.4

Additional Labels

No response

Metadata

Metadata

Assignees

Labels

C-bugCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when applied

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions