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.
33 lines
1.2 KiB
Plaintext
33 lines
1.2 KiB
Plaintext
error[E0277]: the type `[{integer}]` cannot be indexed by `u8`
|
|
--> $DIR/indexing-requires-a-uint.rs:6:9
|
|
|
|
|
LL | [0][0u8];
|
|
| ^^^ slice indices are of type `usize` or ranges of `usize`
|
|
|
|
|
= help: the trait `SliceIndex<[{integer}]>` is not implemented for `u8`
|
|
= help: the trait `SliceIndex<[T]>` is implemented for `usize`
|
|
= note: required for `[{integer}]` to implement `Index<u8>`
|
|
|
|
error[E0308]: mismatched types
|
|
--> $DIR/indexing-requires-a-uint.rs:12:18
|
|
|
|
|
LL | bar::<isize>(i); // i should not be re-coerced back to an isize
|
|
| ------------ ^ expected `isize`, found `usize`
|
|
| |
|
|
| arguments to this function are incorrect
|
|
|
|
|
note: function defined here
|
|
--> $DIR/indexing-requires-a-uint.rs:5:8
|
|
|
|
|
LL | fn bar<T>(_: T) {}
|
|
| ^^^ ----
|
|
help: you can convert a `usize` to an `isize` and panic if the converted value doesn't fit
|
|
|
|
|
LL | bar::<isize>(i.try_into().unwrap()); // i should not be re-coerced back to an isize
|
|
| ++++++++++++++++++++
|
|
|
|
error: aborting due to 2 previous errors
|
|
|
|
Some errors have detailed explanations: E0277, E0308.
|
|
For more information about an error, try `rustc --explain E0277`.
|