mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 15:14:29 +00:00
Support unions here and there
This commit is contained in:
parent
ee3f3bf260
commit
01424f5622
4 changed files with 28 additions and 2 deletions
|
@ -140,8 +140,10 @@ fn check_copy_clone<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, item: &Item, trait_ref
|
|||
return; // ty is not Copy
|
||||
}
|
||||
|
||||
// Some types are not Clone by default but could be cloned `by hand` if necessary
|
||||
match ty.sty {
|
||||
TypeVariants::TyUnion(..) => return,
|
||||
|
||||
// Some types are not Clone by default but could be cloned “by hand” if necessary
|
||||
TypeVariants::TyEnum(def, substs) |
|
||||
TypeVariants::TyStruct(def, substs) => {
|
||||
for variant in &def.variants {
|
||||
|
|
|
@ -209,7 +209,8 @@ fn has_is_empty(cx: &LateContext, expr: &Expr) -> bool {
|
|||
}
|
||||
ty::TyProjection(_) => ty.ty_to_def_id().map_or(false, |id| has_is_empty_impl(cx, &id)),
|
||||
ty::TyEnum(id, _) |
|
||||
ty::TyStruct(id, _) => has_is_empty_impl(cx, &id.did),
|
||||
ty::TyStruct(id, _) |
|
||||
ty::TyUnion(id, _) => has_is_empty_impl(cx, &id.did),
|
||||
ty::TyArray(..) | ty::TyStr => true,
|
||||
_ => false,
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#![feature(plugin)]
|
||||
#![plugin(clippy)]
|
||||
|
||||
#![feature(untagged_unions)]
|
||||
|
||||
#![deny(warnings)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
|
@ -45,6 +47,20 @@ impl Clone for Qux {
|
|||
fn clone(&self) -> Self { Qux }
|
||||
}
|
||||
|
||||
// looks like unions don't support deriving Clone for now
|
||||
#[derive(Copy)]
|
||||
union Union {
|
||||
a: u8,
|
||||
}
|
||||
|
||||
impl Clone for Union {
|
||||
fn clone(&self) -> Self {
|
||||
Union {
|
||||
a: 42,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// See #666
|
||||
#[derive(Copy)]
|
||||
struct Lt<'a> {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#![deny(no_effect, unnecessary_operation)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(path_statements)]
|
||||
#![feature(untagged_unions)]
|
||||
|
||||
struct Unit;
|
||||
struct Tuple(i32);
|
||||
|
@ -15,6 +16,11 @@ enum Enum {
|
|||
Struct { field: i32 },
|
||||
}
|
||||
|
||||
union Union {
|
||||
a: u8,
|
||||
b: f64,
|
||||
}
|
||||
|
||||
fn get_number() -> i32 { 0 }
|
||||
fn get_struct() -> Struct { Struct { field: 0 } }
|
||||
|
||||
|
@ -30,6 +36,7 @@ fn main() {
|
|||
Tuple(0); //~ERROR statement with no effect
|
||||
Struct { field: 0 }; //~ERROR statement with no effect
|
||||
Struct { ..s }; //~ERROR statement with no effect
|
||||
Union { a: 0 }; //~ERROR statement with no effect
|
||||
Enum::Tuple(0); //~ERROR statement with no effect
|
||||
Enum::Struct { field: 0 }; //~ERROR statement with no effect
|
||||
5 + 6; //~ERROR statement with no effect
|
||||
|
|
Loading…
Reference in a new issue