mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #116812 - rmehri01:missing_copy_implementations_non_exhaustive, r=petrochenkov
Disable missing_copy_implementations lint on non_exhaustive types Fixes #116766
This commit is contained in:
commit
0653d7eebf
@ -677,6 +677,11 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
|
||||
if type_implements_negative_copy_modulo_regions(cx.tcx, ty, param_env) {
|
||||
return;
|
||||
}
|
||||
if def.is_variant_list_non_exhaustive()
|
||||
|| def.variants().iter().any(|variant| variant.is_field_list_non_exhaustive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// We shouldn't recommend implementing `Copy` on stateful things,
|
||||
// such as iterators.
|
||||
|
25
tests/ui/lint/missing-copy-implementations-non-exhaustive.rs
Normal file
25
tests/ui/lint/missing-copy-implementations-non-exhaustive.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// Test for issue #116766.
|
||||
// Ensure that we don't suggest impl'ing `Copy` for a type if it or at least one
|
||||
// of it's variants are marked as `non_exhaustive`.
|
||||
|
||||
// check-pass
|
||||
|
||||
#![deny(missing_copy_implementations)]
|
||||
|
||||
#[non_exhaustive]
|
||||
pub enum MyEnum {
|
||||
A,
|
||||
}
|
||||
|
||||
#[non_exhaustive]
|
||||
pub struct MyStruct {
|
||||
foo: usize,
|
||||
}
|
||||
|
||||
pub enum MyEnum2 {
|
||||
#[non_exhaustive]
|
||||
A,
|
||||
B,
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user