diff options
| author | bors <bors@rust-lang.org> | 2023-03-24 18:40:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-03-24 18:40:19 +0000 |
| commit | 80a933042e4e07ee9d9c20897d4fab595766fef6 (patch) | |
| tree | a4f766b70383a271ff11540d7723d4619b644039 /src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed | |
| parent | 31d74fb24bb16317e09f936fbf46590599b02940 (diff) | |
| parent | 50475e864881eb15c01afac83c7aad5e5ff96437 (diff) | |
| download | rust-80a933042e4e07ee9d9c20897d4fab595766fef6.tar.gz rust-80a933042e4e07ee9d9c20897d4fab595766fef6.zip | |
Auto merge of #109566 - flip1995:clippyup, r=Manishearth
Update Clippy r? `@Manishearth` One day late, sorry :neutral_face:
Diffstat (limited to 'src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed')
| -rw-r--r-- | src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed b/src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed new file mode 100644 index 00000000000..b47129e4a36 --- /dev/null +++ b/src/tools/clippy/tests/ui/unnecessary_struct_initialization.fixed @@ -0,0 +1,73 @@ +// run-rustfix + +#![allow(unused)] +#![warn(clippy::unnecessary_struct_initialization)] + +struct S { + f: String, +} + +#[derive(Clone, Copy)] +struct T { + f: u32, +} + +struct U { + f: u32, +} + +impl Clone for U { + fn clone(&self) -> Self { + // Do not lint: `Self` does not implement `Copy` + Self { ..*self } + } +} + +#[derive(Copy)] +struct V { + f: u32, +} + +impl Clone for V { + fn clone(&self) -> Self { + // Lint: `Self` implements `Copy` + *self + } +} + +fn main() { + // Should lint: `a` would be consumed anyway + let a = S { f: String::from("foo") }; + let mut b = a; + + // Should lint: `b` would be consumed, and is mutable + let c = &mut b; + + // Should not lint as `d` is not mutable + let d = S { f: String::from("foo") }; + let e = &mut S { ..d }; + + // Should lint as `f` would be consumed anyway + let f = S { f: String::from("foo") }; + let g = &f; + + // Should lint: the result of an expression is mutable + let h = &mut *Box::new(S { f: String::from("foo") }); + + // Should not lint: `m` would be both alive and borrowed + let m = T { f: 17 }; + let n = &T { ..m }; + + // Should not lint: `m` should not be modified + let o = &mut T { ..m }; + o.f = 32; + assert_eq!(m.f, 17); + + // Should not lint: `m` should not be modified + let o = &mut T { ..m } as *mut T; + unsafe { &mut *o }.f = 32; + assert_eq!(m.f, 17); + + // Should lint: the result of an expression is mutable and temporary + let p = &mut *Box::new(T { f: 5 }); +} |
