rust-clippy/tests/ui/temporary_assignment.rs

85 lines
1.8 KiB
Rust
Raw Normal View History

2018-10-06 16:18:06 +00:00
// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
2018-07-28 15:34:52 +00:00
#![warn(clippy::temporary_assignment)]
2015-11-04 09:55:14 +00:00
use std::ops::{Deref, DerefMut};
struct TupleStruct(i32);
2015-11-04 09:55:14 +00:00
struct Struct {
2018-12-09 22:26:16 +00:00
field: i32,
2015-11-04 09:55:14 +00:00
}
struct MultiStruct {
structure: Struct,
}
2015-11-04 09:55:14 +00:00
struct Wrapper<'a> {
2018-12-09 22:26:16 +00:00
inner: &'a mut Struct,
2015-11-04 09:55:14 +00:00
}
impl<'a> Deref for Wrapper<'a> {
type Target = Struct;
2018-12-09 22:26:16 +00:00
fn deref(&self) -> &Struct {
self.inner
}
2015-11-04 09:55:14 +00:00
}
impl<'a> DerefMut for Wrapper<'a> {
2018-12-09 22:26:16 +00:00
fn deref_mut(&mut self) -> &mut Struct {
self.inner
}
2015-11-04 09:55:14 +00:00
}
struct ArrayStruct {
array: [i32; 1],
}
const A: TupleStruct = TupleStruct(1);
const B: Struct = Struct { field: 1 };
const C: MultiStruct = MultiStruct {
structure: Struct { field: 1 },
};
const D: ArrayStruct = ArrayStruct { array: [1] };
2015-11-04 09:55:14 +00:00
fn main() {
let mut s = Struct { field: 0 };
let mut t = (0, 0);
2017-02-08 13:58:07 +00:00
Struct { field: 0 }.field = 1;
MultiStruct {
structure: Struct { field: 0 },
}
.structure
.field = 1;
ArrayStruct { array: [0] }.array[0] = 1;
2017-02-08 13:58:07 +00:00
(0, 0).0 = 1;
2015-11-04 09:55:14 +00:00
A.0 = 2;
B.field = 2;
C.structure.field = 2;
D.array[0] = 2;
2015-11-04 09:55:14 +00:00
// no error
s.field = 1;
t.0 = 1;
Wrapper { inner: &mut s }.field = 1;
let mut a_mut = TupleStruct(1);
a_mut.0 = 2;
let mut b_mut = Struct { field: 1 };
b_mut.field = 2;
let mut c_mut = MultiStruct {
structure: Struct { field: 1 },
};
c_mut.structure.field = 2;
let mut d_mut = ArrayStruct { array: [1] };
d_mut.array[0] = 2;
2015-11-04 09:55:14 +00:00
}