]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/temporary_assignment.rs
Auto merge of #4478 - tsurai:master, r=flip1995
[rust.git] / tests / ui / temporary_assignment.rs
index 9c4365bef40931a3eb0b0a218432c621f764751a..c6c315d5fab5d359aa7378719722fdb9a8ead38c 100644 (file)
@@ -1,46 +1,75 @@
-// 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.
-
-
-
-
-
 #![warn(clippy::temporary_assignment)]
 
 use std::ops::{Deref, DerefMut};
 
+struct TupleStruct(i32);
+
 struct Struct {
-    field: i32
+    field: i32,
+}
+
+struct MultiStruct {
+    structure: Struct,
 }
 
 struct Wrapper<'a> {
-    inner: &'a mut Struct
+    inner: &'a mut Struct,
 }
 
 impl<'a> Deref for Wrapper<'a> {
     type Target = Struct;
-    fn deref(&self) -> &Struct { self.inner }
+    fn deref(&self) -> &Struct {
+        self.inner
+    }
 }
 
 impl<'a> DerefMut for Wrapper<'a> {
-    fn deref_mut(&mut self) -> &mut Struct { self.inner }
+    fn deref_mut(&mut self) -> &mut Struct {
+        self.inner
+    }
+}
+
+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] };
+
 fn main() {
     let mut s = Struct { field: 0 };
     let mut t = (0, 0);
 
     Struct { field: 0 }.field = 1;
+    MultiStruct {
+        structure: Struct { field: 0 },
+    }
+    .structure
+    .field = 1;
+    ArrayStruct { array: [0] }.array[0] = 1;
     (0, 0).0 = 1;
 
+    A.0 = 2;
+    B.field = 2;
+    C.structure.field = 2;
+    D.array[0] = 2;
+
     // 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;
 }