mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 21:16:44 +00:00 
			
		
		
		
	 5706be1854
			
		
	
	
		5706be1854
		
	
	
	
	
		
			
			Indexing is similar to method calls in having an arbitrary left-hand-side and then something on the right, which is the main part of the expression. Method calls already have a span for that right part, but indexing does not. This means that long method chains that use indexing have really bad spans, especially when the indexing panics and that span in coverted into a panic location. This does the same thing as method calls for the AST and HIR, storing an extra span which is then put into the `fn_span` field in THIR.
		
			
				
	
	
		
			15 lines
		
	
	
		
			445 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			15 lines
		
	
	
		
			445 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Make sure that indexing an array is only valid with a `usize`, not any other
 | |
| // integral type.
 | |
| 
 | |
| fn main() {
 | |
|     fn bar<T>(_: T) {}
 | |
|     [0][0u8]; //~ ERROR: the type `[{integer}]` cannot be indexed by `u8`
 | |
| 
 | |
|     [0][0]; // should infer to be a usize
 | |
| 
 | |
|     let i = 0;      // i is an IntVar
 | |
|     [0][i];         // i should be locked to usize
 | |
|     bar::<isize>(i);  // i should not be re-coerced back to an isize
 | |
|     //~^ ERROR: mismatched types
 | |
| }
 |