Merge commit 'ca3b393750' into clippy-subtree-update
This commit is contained in:
parent
876d5f00a0
commit
a5aaf33422
84 changed files with 1067 additions and 427 deletions
|
|
@ -33,16 +33,9 @@ fn main() {
|
|||
let _ = Arc::new(42);
|
||||
|
||||
let _ = Arc::new(RefCell::new(42));
|
||||
//~^ ERROR: usage of an `Arc` that is not `Send` and `Sync`
|
||||
//~| NOTE: the trait `Sync` is not implemented for `RefCell<i32>`
|
||||
|
||||
let mutex = Mutex::new(1);
|
||||
let _ = Arc::new(mutex.lock().unwrap());
|
||||
//~^ ERROR: usage of an `Arc` that is not `Send` and `Sync`
|
||||
//~| NOTE: the trait `Send` is not implemented for `MutexGuard<'_, i32>`
|
||||
|
||||
let _ = Arc::new(&42 as *const i32);
|
||||
//~^ ERROR: usage of an `Arc` that is not `Send` and `Sync`
|
||||
//~| NOTE: the trait `Send` is not implemented for `*const i32`
|
||||
//~| NOTE: the trait `Sync` is not implemented for `*const i32`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,38 +4,31 @@ error: usage of an `Arc` that is not `Send` and `Sync`
|
|||
LL | let _ = Arc::new(RefCell::new(42));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `Arc<RefCell<i32>>` is not `Send` and `Sync` as:
|
||||
= note: - the trait `Sync` is not implemented for `RefCell<i32>`
|
||||
= help: consider using an `Rc` instead. `Arc` does not provide benefits for non `Send` and `Sync` types
|
||||
= note: if you intend to use `Arc` with `Send` and `Sync` traits
|
||||
= note: wrap the inner type with a `Mutex` or implement `Send` and `Sync` for `RefCell<i32>`
|
||||
= note: `Arc<RefCell<i32>>` is not `Send` and `Sync` as `RefCell<i32>` is not `Sync`
|
||||
= help: if the `Arc` will not used be across threads replace it with an `Rc`
|
||||
= help: otherwise make `RefCell<i32>` `Send` and `Sync` or consider a wrapper type such as `Mutex`
|
||||
= note: `-D clippy::arc-with-non-send-sync` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::arc_with_non_send_sync)]`
|
||||
|
||||
error: usage of an `Arc` that is not `Send` and `Sync`
|
||||
--> tests/ui/arc_with_non_send_sync.rs:40:13
|
||||
--> tests/ui/arc_with_non_send_sync.rs:38:13
|
||||
|
|
||||
LL | let _ = Arc::new(mutex.lock().unwrap());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `Arc<MutexGuard<'_, i32>>` is not `Send` and `Sync` as:
|
||||
= note: - the trait `Send` is not implemented for `MutexGuard<'_, i32>`
|
||||
= help: consider using an `Rc` instead. `Arc` does not provide benefits for non `Send` and `Sync` types
|
||||
= note: if you intend to use `Arc` with `Send` and `Sync` traits
|
||||
= note: wrap the inner type with a `Mutex` or implement `Send` and `Sync` for `MutexGuard<'_, i32>`
|
||||
= note: `Arc<MutexGuard<'_, i32>>` is not `Send` and `Sync` as `MutexGuard<'_, i32>` is not `Send`
|
||||
= help: if the `Arc` will not used be across threads replace it with an `Rc`
|
||||
= help: otherwise make `MutexGuard<'_, i32>` `Send` and `Sync` or consider a wrapper type such as `Mutex`
|
||||
|
||||
error: usage of an `Arc` that is not `Send` and `Sync`
|
||||
--> tests/ui/arc_with_non_send_sync.rs:44:13
|
||||
--> tests/ui/arc_with_non_send_sync.rs:40:13
|
||||
|
|
||||
LL | let _ = Arc::new(&42 as *const i32);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `Arc<*const i32>` is not `Send` and `Sync` as:
|
||||
= note: - the trait `Send` is not implemented for `*const i32`
|
||||
= note: - the trait `Sync` is not implemented for `*const i32`
|
||||
= help: consider using an `Rc` instead. `Arc` does not provide benefits for non `Send` and `Sync` types
|
||||
= note: if you intend to use `Arc` with `Send` and `Sync` traits
|
||||
= note: wrap the inner type with a `Mutex` or implement `Send` and `Sync` for `*const i32`
|
||||
= note: `Arc<*const i32>` is not `Send` and `Sync` as `*const i32` is neither `Send` nor `Sync`
|
||||
= help: if the `Arc` will not used be across threads replace it with an `Rc`
|
||||
= help: otherwise make `*const i32` `Send` and `Sync` or consider a wrapper type such as `Mutex`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -176,3 +176,17 @@ pub fn with_empty_docs(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
|||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn duplicated_attr(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||
let item = parse_macro_input!(input as syn::Item);
|
||||
let attrs: Vec<syn::Attribute> = vec![];
|
||||
quote! {
|
||||
#(#attrs)*
|
||||
#[allow(unused)]
|
||||
#[allow(unused)]
|
||||
#[allow(unused)]
|
||||
#item
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -463,6 +463,18 @@ fn issue11642() {
|
|||
}
|
||||
}
|
||||
|
||||
fn issue11738() {
|
||||
macro_rules! m {
|
||||
() => {
|
||||
let _ = i32::MIN as u32; // cast_sign_loss
|
||||
let _ = u32::MAX as u8; // cast_possible_truncation
|
||||
let _ = std::f64::consts::PI as f32; // cast_possible_truncation
|
||||
let _ = 0i8 as i32; // cast_lossless
|
||||
};
|
||||
}
|
||||
m!();
|
||||
}
|
||||
|
||||
fn issue12506() -> usize {
|
||||
let bar: Result<Option<i64>, u32> = Ok(Some(10));
|
||||
bar.unwrap().unwrap() as usize
|
||||
|
|
|
|||
|
|
@ -650,8 +650,47 @@ error: casting `i32` to `u32` may lose the sign of the value
|
|||
LL | (a.abs() * b.pow(2) / c.abs()) as u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: casting `i32` to `u32` may lose the sign of the value
|
||||
--> tests/ui/cast.rs:469:21
|
||||
|
|
||||
LL | let _ = i32::MIN as u32; // cast_sign_loss
|
||||
| ^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | m!();
|
||||
| ---- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: casting `u32` to `u8` may truncate the value
|
||||
--> tests/ui/cast.rs:470:21
|
||||
|
|
||||
LL | let _ = u32::MAX as u8; // cast_possible_truncation
|
||||
| ^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | m!();
|
||||
| ---- in this macro invocation
|
||||
|
|
||||
= help: if this is intentional allow the lint with `#[allow(clippy::cast_possible_truncation)]` ...
|
||||
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
help: ... or use `try_from` and handle the error accordingly
|
||||
|
|
||||
LL | let _ = u8::try_from(u32::MAX); // cast_possible_truncation
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error: casting `f64` to `f32` may truncate the value
|
||||
--> tests/ui/cast.rs:471:21
|
||||
|
|
||||
LL | let _ = std::f64::consts::PI as f32; // cast_possible_truncation
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | m!();
|
||||
| ---- in this macro invocation
|
||||
|
|
||||
= help: if this is intentional allow the lint with `#[allow(clippy::cast_possible_truncation)]` ...
|
||||
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: casting `i64` to `usize` may truncate the value on targets with 32-bit wide pointers
|
||||
--> tests/ui/cast.rs:468:5
|
||||
--> tests/ui/cast.rs:480:5
|
||||
|
|
||||
LL | bar.unwrap().unwrap() as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -663,10 +702,10 @@ LL | usize::try_from(bar.unwrap().unwrap())
|
|||
|
|
||||
|
||||
error: casting `i64` to `usize` may lose the sign of the value
|
||||
--> tests/ui/cast.rs:468:5
|
||||
--> tests/ui/cast.rs:480:5
|
||||
|
|
||||
LL | bar.unwrap().unwrap() as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 87 previous errors
|
||||
error: aborting due to 90 previous errors
|
||||
|
||||
|
|
|
|||
26
tests/ui/crashes/ice-12585.rs
Normal file
26
tests/ui/crashes/ice-12585.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#![allow(clippy::unit_arg)]
|
||||
|
||||
struct One {
|
||||
x: i32,
|
||||
}
|
||||
struct Two {
|
||||
x: i32,
|
||||
}
|
||||
|
||||
struct Product {}
|
||||
|
||||
impl Product {
|
||||
pub fn a_method(self, _: ()) {}
|
||||
}
|
||||
|
||||
fn from_array(_: [i32; 2]) -> Product {
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
let one = One { x: 1 };
|
||||
let two = Two { x: 2 };
|
||||
|
||||
let product = from_array([one.x, two.x]);
|
||||
product.a_method(<()>::default());
|
||||
}
|
||||
|
|
@ -7,13 +7,5 @@ LL | s() as *const ();
|
|||
= note: `-D clippy::ptr-as-ptr` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::ptr_as_ptr)]`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/crashes/ice-12616.rs:6:5
|
||||
|
|
||||
LL | s() as *const ();
|
||||
| ^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `s().cast::<()>()`
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -235,3 +235,8 @@ fn parenthesized_word() {}
|
|||
/// OSes
|
||||
/// UXes
|
||||
fn plural_acronym_test() {}
|
||||
|
||||
extern {
|
||||
/// `foo()`
|
||||
fn in_extern();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,3 +235,8 @@ fn parenthesized_word() {}
|
|||
/// OSes
|
||||
/// UXes
|
||||
fn plural_acronym_test() {}
|
||||
|
||||
extern {
|
||||
/// foo()
|
||||
fn in_extern();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -352,5 +352,16 @@ help: try
|
|||
LL | /// `ABes`
|
||||
| ~~~~~~
|
||||
|
||||
error: aborting due to 32 previous errors
|
||||
error: item in documentation is missing backticks
|
||||
--> tests/ui/doc/doc-fixable.rs:240:9
|
||||
|
|
||||
LL | /// foo()
|
||||
| ^^^^^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL | /// `foo()`
|
||||
| ~~~~~~~
|
||||
|
||||
error: aborting due to 33 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
//@aux-build:proc_macro_attr.rs
|
||||
|
||||
#![warn(clippy::duplicated_attributes)]
|
||||
#![cfg(any(unix, windows))]
|
||||
#![allow(dead_code)]
|
||||
#![allow(dead_code)] //~ ERROR: duplicated attribute
|
||||
#![cfg(any(unix, windows))] // Should not warn!
|
||||
|
||||
#[macro_use]
|
||||
extern crate proc_macro_attr;
|
||||
|
||||
#[cfg(any(unix, windows, target_os = "linux"))]
|
||||
#[allow(dead_code)]
|
||||
#[allow(dead_code)] //~ ERROR: duplicated attribute
|
||||
|
|
@ -12,7 +17,10 @@ fn foo() {}
|
|||
|
||||
#[cfg(unix)]
|
||||
#[cfg(windows)]
|
||||
#[cfg(unix)] //~ ERROR: duplicated attribute
|
||||
#[cfg(unix)] // cfgs are not handled
|
||||
fn bar() {}
|
||||
|
||||
#[proc_macro_attr::duplicated_attr()] // Should not warn!
|
||||
fn babar() {}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
error: duplicated attribute
|
||||
--> tests/ui/duplicated_attributes.rs:4:10
|
||||
--> tests/ui/duplicated_attributes.rs:6:10
|
||||
|
|
||||
LL | #![allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: first defined here
|
||||
--> tests/ui/duplicated_attributes.rs:3:10
|
||||
--> tests/ui/duplicated_attributes.rs:5:10
|
||||
|
|
||||
LL | #![allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
help: remove this attribute
|
||||
--> tests/ui/duplicated_attributes.rs:4:10
|
||||
--> tests/ui/duplicated_attributes.rs:6:10
|
||||
|
|
||||
LL | #![allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
@ -18,38 +18,21 @@ LL | #![allow(dead_code)]
|
|||
= help: to override `-D warnings` add `#[allow(clippy::duplicated_attributes)]`
|
||||
|
||||
error: duplicated attribute
|
||||
--> tests/ui/duplicated_attributes.rs:9:9
|
||||
--> tests/ui/duplicated_attributes.rs:14:9
|
||||
|
|
||||
LL | #[allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: first defined here
|
||||
--> tests/ui/duplicated_attributes.rs:8:9
|
||||
--> tests/ui/duplicated_attributes.rs:13:9
|
||||
|
|
||||
LL | #[allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
help: remove this attribute
|
||||
--> tests/ui/duplicated_attributes.rs:9:9
|
||||
--> tests/ui/duplicated_attributes.rs:14:9
|
||||
|
|
||||
LL | #[allow(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: duplicated attribute
|
||||
--> tests/ui/duplicated_attributes.rs:15:7
|
||||
|
|
||||
LL | #[cfg(unix)]
|
||||
| ^^^^
|
||||
|
|
||||
note: first defined here
|
||||
--> tests/ui/duplicated_attributes.rs:13:7
|
||||
|
|
||||
LL | #[cfg(unix)]
|
||||
| ^^^^
|
||||
help: remove this attribute
|
||||
--> tests/ui/duplicated_attributes.rs:15:7
|
||||
|
|
||||
LL | #[cfg(unix)]
|
||||
| ^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,16 @@ fn main() {
|
|||
|
||||
let x: Option<Vec<String>> = None;
|
||||
x.unwrap_or_default();
|
||||
|
||||
// Issue #12564
|
||||
// No error as &Vec<_> doesn't implement std::default::Default
|
||||
let mut map = std::collections::HashMap::from([(0, vec![0; 3]), (1, vec![1; 3]), (2, vec![2])]);
|
||||
let x: &[_] = if let Some(x) = map.get(&0) { x } else { &[] };
|
||||
// Same code as above written using match.
|
||||
let x: &[_] = match map.get(&0) {
|
||||
Some(x) => x,
|
||||
None => &[],
|
||||
};
|
||||
}
|
||||
|
||||
// Issue #12531
|
||||
|
|
|
|||
|
|
@ -37,6 +37,16 @@ fn main() {
|
|||
} else {
|
||||
Vec::default()
|
||||
};
|
||||
|
||||
// Issue #12564
|
||||
// No error as &Vec<_> doesn't implement std::default::Default
|
||||
let mut map = std::collections::HashMap::from([(0, vec![0; 3]), (1, vec![1; 3]), (2, vec![2])]);
|
||||
let x: &[_] = if let Some(x) = map.get(&0) { x } else { &[] };
|
||||
// Same code as above written using match.
|
||||
let x: &[_] = match map.get(&0) {
|
||||
Some(x) => x,
|
||||
None => &[],
|
||||
};
|
||||
}
|
||||
|
||||
// Issue #12531
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ LL | | };
|
|||
| |_____^ help: replace it with: `x.unwrap_or_default()`
|
||||
|
||||
error: match can be simplified with `.unwrap_or_default()`
|
||||
--> tests/ui/manual_unwrap_or_default.rs:46:20
|
||||
--> tests/ui/manual_unwrap_or_default.rs:56:20
|
||||
|
|
||||
LL | Some(_) => match *b {
|
||||
| ____________________^
|
||||
|
|
|
|||
|
|
@ -19,6 +19,20 @@ mod foo {
|
|||
|
||||
// Should not warn
|
||||
pub struct Foobar;
|
||||
|
||||
// #12544 - shouldn't warn if item name consists only of an allowed prefix and a module name.
|
||||
pub fn to_foo() {}
|
||||
pub fn into_foo() {}
|
||||
pub fn as_foo() {}
|
||||
pub fn from_foo() {}
|
||||
pub fn try_into_foo() {}
|
||||
pub fn try_from_foo() {}
|
||||
pub trait IntoFoo {}
|
||||
pub trait ToFoo {}
|
||||
pub trait AsFoo {}
|
||||
pub trait FromFoo {}
|
||||
pub trait TryIntoFoo {}
|
||||
pub trait TryFromFoo {}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
//@needs-asm-support
|
||||
//@aux-build:proc_macros.rs
|
||||
#![allow(unused)]
|
||||
#![allow(deref_nullptr)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:36:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:37:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | STATIC += 1;
|
||||
|
|
@ -8,12 +8,12 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: modification of a mutable static occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:37:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:38:9
|
||||
|
|
||||
LL | STATIC += 1;
|
||||
| ^^^^^^^^^^^
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:38:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:39:9
|
||||
|
|
||||
LL | not_very_safe();
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
@ -21,7 +21,7 @@ LL | not_very_safe();
|
|||
= help: to override `-D warnings` add `#[allow(clippy::multiple_unsafe_ops_per_block)]`
|
||||
|
||||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:45:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:46:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | drop(u.u);
|
||||
|
|
@ -30,18 +30,18 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: union field access occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:46:14
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:47:14
|
||||
|
|
||||
LL | drop(u.u);
|
||||
| ^^^
|
||||
note: raw pointer dereference occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:47:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:48:9
|
||||
|
|
||||
LL | *raw_ptr();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: this `unsafe` block contains 3 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:52:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:53:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | asm!("nop");
|
||||
|
|
@ -51,23 +51,23 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: inline assembly used here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:53:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:54:9
|
||||
|
|
||||
LL | asm!("nop");
|
||||
| ^^^^^^^^^^^
|
||||
note: unsafe method call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:54:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:55:9
|
||||
|
|
||||
LL | sample.not_very_safe();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: modification of a mutable static occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:55:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:56:9
|
||||
|
|
||||
LL | STATIC = 0;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: this `unsafe` block contains 6 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:61:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:62:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | drop(u.u);
|
||||
|
|
@ -79,55 +79,55 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: union field access occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:62:14
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:63:14
|
||||
|
|
||||
LL | drop(u.u);
|
||||
| ^^^
|
||||
note: access of a mutable static occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:63:14
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:64:14
|
||||
|
|
||||
LL | drop(STATIC);
|
||||
| ^^^^^^
|
||||
note: unsafe method call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:64:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:65:9
|
||||
|
|
||||
LL | sample.not_very_safe();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:65:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:66:9
|
||||
|
|
||||
LL | not_very_safe();
|
||||
| ^^^^^^^^^^^^^^^
|
||||
note: raw pointer dereference occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:66:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:67:9
|
||||
|
|
||||
LL | *raw_ptr();
|
||||
| ^^^^^^^^^^
|
||||
note: inline assembly used here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:67:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:68:9
|
||||
|
|
||||
LL | asm!("nop");
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:105:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:106:5
|
||||
|
|
||||
LL | unsafe { char::from_u32_unchecked(*ptr.cast::<u32>()) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:105:14
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:106:14
|
||||
|
|
||||
LL | unsafe { char::from_u32_unchecked(*ptr.cast::<u32>()) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: raw pointer dereference occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:105:39
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:106:39
|
||||
|
|
||||
LL | unsafe { char::from_u32_unchecked(*ptr.cast::<u32>()) }
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:123:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:124:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | x();
|
||||
|
|
@ -136,18 +136,18 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:124:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:125:9
|
||||
|
|
||||
LL | x();
|
||||
| ^^^
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:125:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:126:9
|
||||
|
|
||||
LL | x();
|
||||
| ^^^
|
||||
|
||||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:134:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:135:9
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | T::X();
|
||||
|
|
@ -156,18 +156,18 @@ LL | | }
|
|||
| |_________^
|
||||
|
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:135:13
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:136:13
|
||||
|
|
||||
LL | T::X();
|
||||
| ^^^^^^
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:136:13
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:137:13
|
||||
|
|
||||
LL | T::X();
|
||||
| ^^^^^^
|
||||
|
||||
error: this `unsafe` block contains 2 unsafe operations, expected only one
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:144:5
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:145:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | | x.0();
|
||||
|
|
@ -176,12 +176,12 @@ LL | | }
|
|||
| |_____^
|
||||
|
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:145:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:146:9
|
||||
|
|
||||
LL | x.0();
|
||||
| ^^^^^
|
||||
note: unsafe function call occurs here
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:146:9
|
||||
--> tests/ui/multiple_unsafe_ops_per_block.rs:147:9
|
||||
|
|
||||
LL | x.0();
|
||||
| ^^^^^
|
||||
|
|
|
|||
|
|
@ -251,3 +251,11 @@ mod issue_10253 {
|
|||
(&S).f::<()>();
|
||||
}
|
||||
}
|
||||
|
||||
fn issue_12268() {
|
||||
let option = Some((&1,));
|
||||
let x = (&1,);
|
||||
option.unwrap_or((x.0,));
|
||||
//~^ ERROR: this expression creates a reference which is immediately dereferenced by the
|
||||
// compiler
|
||||
}
|
||||
|
|
|
|||
|
|
@ -251,3 +251,11 @@ mod issue_10253 {
|
|||
(&S).f::<()>();
|
||||
}
|
||||
}
|
||||
|
||||
fn issue_12268() {
|
||||
let option = Some((&1,));
|
||||
let x = (&1,);
|
||||
option.unwrap_or((&x.0,));
|
||||
//~^ ERROR: this expression creates a reference which is immediately dereferenced by the
|
||||
// compiler
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,5 +163,11 @@ error: this expression borrows a value the compiler would automatically borrow
|
|||
LL | let _ = &mut (&mut { x.u }).x;
|
||||
| ^^^^^^^^^^^^^^ help: change this to: `{ x.u }`
|
||||
|
||||
error: aborting due to 27 previous errors
|
||||
error: this expression creates a reference which is immediately dereferenced by the compiler
|
||||
--> tests/ui/needless_borrow.rs:258:23
|
||||
|
|
||||
LL | option.unwrap_or((&x.0,));
|
||||
| ^^^^ help: change this to: `x.0`
|
||||
|
||||
error: aborting due to 28 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -109,4 +109,12 @@ fn dont_warn_for_negated_partial_ord_comparison() {
|
|||
let _ = !(a >= b);
|
||||
}
|
||||
|
||||
fn issue_12625() {
|
||||
let a = 0;
|
||||
let b = 0;
|
||||
if (a as u64) < b {} //~ ERROR: this boolean expression can be simplified
|
||||
if (a as u64) < b {} //~ ERROR: this boolean expression can be simplified
|
||||
if a as u64 > b {} //~ ERROR: this boolean expression can be simplified
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -109,4 +109,12 @@ fn dont_warn_for_negated_partial_ord_comparison() {
|
|||
let _ = !(a >= b);
|
||||
}
|
||||
|
||||
fn issue_12625() {
|
||||
let a = 0;
|
||||
let b = 0;
|
||||
if !(a as u64 >= b) {} //~ ERROR: this boolean expression can be simplified
|
||||
if !((a as u64) >= b) {} //~ ERROR: this boolean expression can be simplified
|
||||
if !(a as u64 <= b) {} //~ ERROR: this boolean expression can be simplified
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -79,5 +79,23 @@ error: this boolean expression can be simplified
|
|||
LL | if !res.is_none() {}
|
||||
| ^^^^^^^^^^^^^^ help: try: `res.is_some()`
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
error: this boolean expression can be simplified
|
||||
--> tests/ui/nonminimal_bool_methods.rs:115:8
|
||||
|
|
||||
LL | if !(a as u64 >= b) {}
|
||||
| ^^^^^^^^^^^^^^^^ help: try: `(a as u64) < b`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> tests/ui/nonminimal_bool_methods.rs:116:8
|
||||
|
|
||||
LL | if !((a as u64) >= b) {}
|
||||
| ^^^^^^^^^^^^^^^^^^ help: try: `(a as u64) < b`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> tests/ui/nonminimal_bool_methods.rs:117:8
|
||||
|
|
||||
LL | if !(a as u64 <= b) {}
|
||||
| ^^^^^^^^^^^^^^^^ help: try: `a as u64 > b`
|
||||
|
||||
error: aborting due to 16 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//@aux-build:proc_macros.rs
|
||||
//@compile-flags: -Zdeduplicate-diagnostics=yes
|
||||
|
||||
#![warn(clippy::ptr_as_ptr)]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//@aux-build:proc_macros.rs
|
||||
//@compile-flags: -Zdeduplicate-diagnostics=yes
|
||||
|
||||
#![warn(clippy::ptr_as_ptr)]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:19:33
|
||||
--> tests/ui/ptr_as_ptr.rs:18:33
|
||||
|
|
||||
LL | *unsafe { Box::from_raw(Box::into_raw(Box::new(o)) as *mut super::issue_11278_a::T<String>) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `Box::into_raw(Box::new(o)).cast::<super::issue_11278_a::T<String>>()`
|
||||
|
|
@ -8,37 +8,37 @@ LL | *unsafe { Box::from_raw(Box::into_raw(Box::new(o)) as *mut super::i
|
|||
= help: to override `-D warnings` add `#[allow(clippy::ptr_as_ptr)]`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:28:13
|
||||
--> tests/ui/ptr_as_ptr.rs:27:13
|
||||
|
|
||||
LL | let _ = ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:29:13
|
||||
--> tests/ui/ptr_as_ptr.rs:28:13
|
||||
|
|
||||
LL | let _ = mut_ptr as *mut i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:34:17
|
||||
--> tests/ui/ptr_as_ptr.rs:33:17
|
||||
|
|
||||
LL | let _ = *ptr_ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `(*ptr_ptr).cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:47:25
|
||||
--> tests/ui/ptr_as_ptr.rs:46:25
|
||||
|
|
||||
LL | let _: *const i32 = ptr as *const _;
|
||||
| ^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:48:23
|
||||
--> tests/ui/ptr_as_ptr.rs:47:23
|
||||
|
|
||||
LL | let _: *mut i32 = mut_ptr as _;
|
||||
| ^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:51:21
|
||||
--> tests/ui/ptr_as_ptr.rs:50:21
|
||||
|
|
||||
LL | let _ = inline!($ptr as *const i32);
|
||||
| ^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `$ptr.cast::<i32>()`
|
||||
|
|
@ -46,157 +46,157 @@ LL | let _ = inline!($ptr as *const i32);
|
|||
= note: this error originates in the macro `__inline_mac_fn_main` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:72:13
|
||||
--> tests/ui/ptr_as_ptr.rs:71:13
|
||||
|
|
||||
LL | let _ = ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:73:13
|
||||
--> tests/ui/ptr_as_ptr.rs:72:13
|
||||
|
|
||||
LL | let _ = mut_ptr as *mut i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:80:9
|
||||
--> tests/ui/ptr_as_ptr.rs:79:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:84:9
|
||||
--> tests/ui/ptr_as_ptr.rs:83:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:89:9
|
||||
--> tests/ui/ptr_as_ptr.rs:88:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:93:9
|
||||
--> tests/ui/ptr_as_ptr.rs:92:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:98:9
|
||||
--> tests/ui/ptr_as_ptr.rs:97:9
|
||||
|
|
||||
LL | ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:102:9
|
||||
--> tests/ui/ptr_as_ptr.rs:101:9
|
||||
|
|
||||
LL | std::ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:107:9
|
||||
--> tests/ui/ptr_as_ptr.rs:106:9
|
||||
|
|
||||
LL | ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:111:9
|
||||
--> tests/ui/ptr_as_ptr.rs:110:9
|
||||
|
|
||||
LL | core::ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:118:9
|
||||
--> tests/ui/ptr_as_ptr.rs:117:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:122:9
|
||||
--> tests/ui/ptr_as_ptr.rs:121:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:127:9
|
||||
--> tests/ui/ptr_as_ptr.rs:126:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:131:9
|
||||
--> tests/ui/ptr_as_ptr.rs:130:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:136:9
|
||||
--> tests/ui/ptr_as_ptr.rs:135:9
|
||||
|
|
||||
LL | ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:140:9
|
||||
--> tests/ui/ptr_as_ptr.rs:139:9
|
||||
|
|
||||
LL | std::ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:145:9
|
||||
--> tests/ui/ptr_as_ptr.rs:144:9
|
||||
|
|
||||
LL | ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:149:9
|
||||
--> tests/ui/ptr_as_ptr.rs:148:9
|
||||
|
|
||||
LL | core::ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:156:9
|
||||
--> tests/ui/ptr_as_ptr.rs:155:9
|
||||
|
|
||||
LL | ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:160:9
|
||||
--> tests/ui/ptr_as_ptr.rs:159:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:165:9
|
||||
--> tests/ui/ptr_as_ptr.rs:164:9
|
||||
|
|
||||
LL | ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:169:9
|
||||
--> tests/ui/ptr_as_ptr.rs:168:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:174:9
|
||||
--> tests/ui/ptr_as_ptr.rs:173:9
|
||||
|
|
||||
LL | ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:178:9
|
||||
--> tests/ui/ptr_as_ptr.rs:177:9
|
||||
|
|
||||
LL | std::ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:183:9
|
||||
--> tests/ui/ptr_as_ptr.rs:182:9
|
||||
|
|
||||
LL | ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
--> tests/ui/ptr_as_ptr.rs:187:9
|
||||
--> tests/ui/ptr_as_ptr.rs:186:9
|
||||
|
|
||||
LL | core::ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null()`
|
||||
|
|
|
|||
|
|
@ -213,3 +213,53 @@ mod issue7392 {
|
|||
let _ = !v.iter().any(|fp| test_u32_2(*fp.field));
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_11910 {
|
||||
fn computations() -> u32 {
|
||||
0
|
||||
}
|
||||
|
||||
struct Foo;
|
||||
impl Foo {
|
||||
fn bar(&self, _: bool) {}
|
||||
}
|
||||
|
||||
fn test_normal_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
let _ = !v.iter().any(|x| *x == 42);
|
||||
Foo.bar(!v.iter().any(|x| *x == 42));
|
||||
}
|
||||
|
||||
fn test_then_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
(!v.iter().any(|x| *x == 42)).then(computations);
|
||||
}
|
||||
|
||||
fn test_then_some_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
(!v.iter().any(|x| *x == 42)).then_some(0);
|
||||
}
|
||||
|
||||
fn test_normal_for_str() {
|
||||
let s = "hello";
|
||||
let _ = !s.contains("world");
|
||||
Foo.bar(!s.contains("world"));
|
||||
let s = String::from("hello");
|
||||
let _ = !s.contains("world");
|
||||
Foo.bar(!s.contains("world"));
|
||||
}
|
||||
|
||||
fn test_then_for_str() {
|
||||
let s = "hello";
|
||||
let _ = (!s.contains("world")).then(computations);
|
||||
let s = String::from("hello");
|
||||
let _ = (!s.contains("world")).then(computations);
|
||||
}
|
||||
|
||||
fn test_then_some_for_str() {
|
||||
let s = "hello";
|
||||
let _ = (!s.contains("world")).then_some(0);
|
||||
let s = String::from("hello");
|
||||
let _ = (!s.contains("world")).then_some(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -219,3 +219,53 @@ mod issue7392 {
|
|||
let _ = v.iter().find(|fp| test_u32_2(*fp.field)).is_none();
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_11910 {
|
||||
fn computations() -> u32 {
|
||||
0
|
||||
}
|
||||
|
||||
struct Foo;
|
||||
impl Foo {
|
||||
fn bar(&self, _: bool) {}
|
||||
}
|
||||
|
||||
fn test_normal_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
let _ = v.iter().find(|x| **x == 42).is_none();
|
||||
Foo.bar(v.iter().find(|x| **x == 42).is_none());
|
||||
}
|
||||
|
||||
fn test_then_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
v.iter().find(|x| **x == 42).is_none().then(computations);
|
||||
}
|
||||
|
||||
fn test_then_some_for_iter() {
|
||||
let v = vec![3, 2, 1, 0, -1, -2, -3];
|
||||
v.iter().find(|x| **x == 42).is_none().then_some(0);
|
||||
}
|
||||
|
||||
fn test_normal_for_str() {
|
||||
let s = "hello";
|
||||
let _ = s.find("world").is_none();
|
||||
Foo.bar(s.find("world").is_none());
|
||||
let s = String::from("hello");
|
||||
let _ = s.find("world").is_none();
|
||||
Foo.bar(s.find("world").is_none());
|
||||
}
|
||||
|
||||
fn test_then_for_str() {
|
||||
let s = "hello";
|
||||
let _ = s.find("world").is_none().then(computations);
|
||||
let s = String::from("hello");
|
||||
let _ = s.find("world").is_none().then(computations);
|
||||
}
|
||||
|
||||
fn test_then_some_for_str() {
|
||||
let s = "hello";
|
||||
let _ = s.find("world").is_none().then_some(0);
|
||||
let s = String::from("hello");
|
||||
let _ = s.find("world").is_none().then_some(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -282,5 +282,77 @@ error: called `is_none()` after searching an `Iterator` with `find`
|
|||
LL | let _ = v.iter().find(|fp| test_u32_2(*fp.field)).is_none();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|fp| test_u32_2(*fp.field))`
|
||||
|
||||
error: aborting due to 43 previous errors
|
||||
error: called `is_none()` after searching an `Iterator` with `find`
|
||||
--> tests/ui/search_is_some_fixable_none.rs:235:17
|
||||
|
|
||||
LL | let _ = v.iter().find(|x| **x == 42).is_none();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| *x == 42)`
|
||||
|
||||
error: called `is_none()` after searching an `Iterator` with `find`
|
||||
--> tests/ui/search_is_some_fixable_none.rs:236:17
|
||||
|
|
||||
LL | Foo.bar(v.iter().find(|x| **x == 42).is_none());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| *x == 42)`
|
||||
|
||||
error: called `is_none()` after searching an `Iterator` with `find`
|
||||
--> tests/ui/search_is_some_fixable_none.rs:241:9
|
||||
|
|
||||
LL | v.iter().find(|x| **x == 42).is_none().then(computations);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!v.iter().any(|x| *x == 42))`
|
||||
|
||||
error: called `is_none()` after searching an `Iterator` with `find`
|
||||
--> tests/ui/search_is_some_fixable_none.rs:246:9
|
||||
|
|
||||
LL | v.iter().find(|x| **x == 42).is_none().then_some(0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!v.iter().any(|x| *x == 42))`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:251:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:252:17
|
||||
|
|
||||
LL | Foo.bar(s.find("world").is_none());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:254:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:255:17
|
||||
|
|
||||
LL | Foo.bar(s.find("world").is_none());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:260:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none().then(computations);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:262:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none().then(computations);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:267:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none().then_some(0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
|
||||
|
||||
error: called `is_none()` after calling `find()` on a string
|
||||
--> tests/ui/search_is_some_fixable_none.rs:269:17
|
||||
|
|
||||
LL | let _ = s.find("world").is_none().then_some(0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
|
||||
|
||||
error: aborting due to 55 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ struct S13 {
|
|||
|
||||
impl S13 {
|
||||
fn new() -> Self {
|
||||
// Shoud not warn!
|
||||
// Should not warn!
|
||||
Self::default()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,5 +57,41 @@ error: no need to put clippy lints behind a `clippy` cfg
|
|||
LL | #![cfg_attr(clippy, deny(clippy::non_minimal_cfg, clippy::maybe_misused_cfg))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `#![deny(clippy::non_minimal_cfg, clippy::maybe_misused_cfg)]`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error: duplicated attribute
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:8:26
|
||||
|
|
||||
LL | #![cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg, clippy::maybe_misused_cfg))]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: first defined here
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:6:26
|
||||
|
|
||||
LL | #![cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg))]
|
||||
| ^^^^^^^^^
|
||||
help: remove this attribute
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:8:26
|
||||
|
|
||||
LL | #![cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg, clippy::maybe_misused_cfg))]
|
||||
| ^^^^^^^^^
|
||||
= note: `-D clippy::duplicated-attributes` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::duplicated_attributes)]`
|
||||
|
||||
error: duplicated attribute
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:17:25
|
||||
|
|
||||
LL | #[cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg, clippy::maybe_misused_cfg))]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: first defined here
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:15:25
|
||||
|
|
||||
LL | #[cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg))]
|
||||
| ^^^^^^^^^
|
||||
help: remove this attribute
|
||||
--> tests/ui/unnecessary_clippy_cfg.rs:17:25
|
||||
|
|
||||
LL | #[cfg_attr(clippy, deny(dead_code, clippy::non_minimal_cfg, clippy::maybe_misused_cfg))]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//@aux-build:proc_macro_derive.rs
|
||||
|
||||
#![allow(unused)]
|
||||
#![allow(unused, clippy::duplicated_attributes)]
|
||||
#![warn(clippy::useless_attribute)]
|
||||
#![warn(unreachable_pub)]
|
||||
#![feature(rustc_private)]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//@aux-build:proc_macro_derive.rs
|
||||
|
||||
#![allow(unused)]
|
||||
#![allow(unused, clippy::duplicated_attributes)]
|
||||
#![warn(clippy::useless_attribute)]
|
||||
#![warn(unreachable_pub)]
|
||||
#![feature(rustc_private)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue