mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			839 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			839 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Regression test for #135514 where the new solver didn't properly record deps for incremental
 | |
| // compilation, similarly to `track-deps-in-new-solver.rs`.
 | |
| //
 | |
| // In this specially crafted example, @steffahn was able to trigger unsoundness with an overlapping
 | |
| // impl that was accepted during the incremental rebuild.
 | |
| 
 | |
| //@ revisions: cpass1 cfail2
 | |
| //@ compile-flags: -Znext-solver
 | |
| 
 | |
| pub trait Trait {}
 | |
| 
 | |
| pub struct S0<T>(T);
 | |
| 
 | |
| pub struct S<T>(T);
 | |
| impl<T> Trait for S<T> where S0<T>: Trait {}
 | |
| 
 | |
| pub struct W;
 | |
| 
 | |
| pub trait Other {
 | |
|     type Choose<L, R>;
 | |
| }
 | |
| 
 | |
| // first impl
 | |
| impl<T: Trait> Other for T {
 | |
|     type Choose<L, R> = L;
 | |
| }
 | |
| 
 | |
| // second impl
 | |
| impl<T> Other for S<T> {
 | |
|     //[cfail2]~^ ERROR conflicting implementations of trait
 | |
|     type Choose<L, R> = R;
 | |
| }
 | |
| 
 | |
| #[cfg(cpass1)]
 | |
| impl Trait for W {}
 | |
| 
 | |
| #[cfg(cfail2)]
 | |
| impl Trait for S<W> {}
 | |
| 
 | |
| fn main() {}
 | 
