mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! Test that dead code warnings are issued for superfluous assignments of fields or variables to
 | |
| //! themselves (issue #75356).
 | |
| //!
 | |
| //! # History of this test (to aid relanding of a fixed version of #81473)
 | |
| //!
 | |
| //! - Original lint request was about self-assignments not triggering sth like `dead_code`.
 | |
| //! - `dead_code` lint expansion for self-assignments was implemented in #87129.
 | |
| //! - Unfortunately implementation components of #87129 had to be disabled as part of reverts
 | |
| //!   #86212, #83171 (to revert #81473) to address regressions #81626 and #81658.
 | |
| //! - Re-enabled in current version to properly detect self-assignments.
 | |
| 
 | |
| //@ check-pass
 | |
| 
 | |
| #![allow(unused_assignments)]
 | |
| #![warn(dead_code)]
 | |
| 
 | |
| fn main() {
 | |
|     let mut x = 0;
 | |
|     x = x;
 | |
|     //~^ WARNING: useless assignment of variable of type `i32` to itself
 | |
| 
 | |
|     x = (x);
 | |
|     //~^ WARNING: useless assignment of variable of type `i32` to itself
 | |
| 
 | |
|     x = {x};
 | |
|     // block expressions don't count as self-assignments
 | |
| 
 | |
| 
 | |
|     struct S<'a> { f: &'a str }
 | |
|     let mut s = S { f: "abc" };
 | |
|     s = s;
 | |
|     //~^ WARNING: useless assignment of variable of type `S<'_>` to itself
 | |
| 
 | |
|     s.f = s.f;
 | |
|     //~^ WARNING: useless assignment of field of type `&str` to itself
 | |
| 
 | |
| 
 | |
|     struct N0 { x: Box<i32> }
 | |
|     struct N1 { n: N0 }
 | |
|     struct N2(N1);
 | |
|     struct N3 { n: N2 };
 | |
|     let mut n3 = N3 { n: N2(N1 { n: N0 { x: Box::new(42) } }) };
 | |
|     n3.n.0.n.x = n3.n.0.n.x;
 | |
|     //~^ WARNING: useless assignment of field of type `Box<i32>` to itself
 | |
| 
 | |
|     let mut t = (1, ((2, 3, (4, 5)),));
 | |
|     t.1.0.2.1 = t.1.0.2.1;
 | |
|     //~^ WARNING: useless assignment of field of type `i32` to itself
 | |
| 
 | |
| 
 | |
|     let mut y = 0;
 | |
|     macro_rules! assign_to_y {
 | |
|         ($cur:expr) => {{
 | |
|             y = $cur;
 | |
|         }};
 | |
|     }
 | |
|     assign_to_y!(y);
 | |
|     // self-assignments in macro expansions are not reported either
 | |
| }
 | 
