mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	When a trait bound fails due to the Self type parameter, adjust_fulfillment_errors now correctly points to the corresponding function argument instead of incorrectly pointing to other arguments. Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
		
			
				
	
	
		
			29 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
error[E0283]: type annotations needed
 | 
						|
  --> $DIR/auto-trait-selection-freeze.rs:19:16
 | 
						|
   |
 | 
						|
LL |     if false { is_trait(foo()) } else { Default::default() }
 | 
						|
   |                ^^^^^^^^ ----- type must be known at this point
 | 
						|
   |                |
 | 
						|
   |                cannot infer type of the type parameter `U` declared on the function `is_trait`
 | 
						|
   |
 | 
						|
note: multiple `impl`s satisfying `impl Sized: Trait<_>` found
 | 
						|
  --> $DIR/auto-trait-selection-freeze.rs:16:1
 | 
						|
   |
 | 
						|
LL | impl<T: Freeze> Trait<u32> for T {}
 | 
						|
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
LL | impl<T> Trait<i32> for T {}
 | 
						|
   | ^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
note: required by a bound in `is_trait`
 | 
						|
  --> $DIR/auto-trait-selection-freeze.rs:11:16
 | 
						|
   |
 | 
						|
LL | fn is_trait<T: Trait<U>, U: Default>(_: T) -> U {
 | 
						|
   |                ^^^^^^^^ required by this bound in `is_trait`
 | 
						|
help: consider specifying the generic arguments
 | 
						|
   |
 | 
						|
LL |     if false { is_trait::<_, U>(foo()) } else { Default::default() }
 | 
						|
   |                        ++++++++
 | 
						|
 | 
						|
error: aborting due to 1 previous error
 | 
						|
 | 
						|
For more information about this error, try `rustc --explain E0283`.
 |