Skip to content

Commit

Permalink
Unrolled build for rust-lang#119175
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#119175 - veera-sivarajan:fix-cast-to-slice, r=WaffleLapkin

fix: diagnostic for casting reference to slice

fixes:  rust-lang#118790

Removes `if self.cast_ty.is_trait()` to produce the same diagnostic for cast to slice and trait.
  • Loading branch information
rust-timer authored Dec 27, 2023
2 parents 9da4432 + 286f2d8 commit b21d0e5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 32 deletions.
30 changes: 12 additions & 18 deletions compiler/rustc_hir_typeck/src/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -539,25 +539,19 @@ impl<'a, 'tcx> CastCheck<'tcx> {
match self.expr_ty.kind() {
ty::Ref(_, _, mt) => {
let mtstr = mt.prefix_str();
if self.cast_ty.is_trait() {
match fcx.tcx.sess.source_map().span_to_snippet(self.cast_span) {
Ok(s) => {
err.span_suggestion(
self.cast_span,
"try casting to a reference instead",
format!("&{mtstr}{s}"),
Applicability::MachineApplicable,
);
}
Err(_) => {
let msg = format!("did you mean `&{mtstr}{tstr}`?");
err.span_help(self.cast_span, msg);
}
match fcx.tcx.sess.source_map().span_to_snippet(self.cast_span) {
Ok(s) => {
err.span_suggestion(
self.cast_span,
"try casting to a reference instead",
format!("&{mtstr}{s}"),
Applicability::MachineApplicable,
);
}
Err(_) => {
let msg = format!("did you mean `&{mtstr}{tstr}`?");
err.span_help(self.cast_span, msg);
}
} else {
let msg =
format!("consider using an implicit coercion to `&{mtstr}{tstr}` instead");
err.span_help(self.span, msg);
}
}
ty::Adt(def, ..) if def.is_box() => {
Expand Down
8 changes: 8 additions & 0 deletions tests/ui/cast/cast-to-slice.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
fn main() {
"example".as_bytes() as [char];
//~^ ERROR cast to unsized type

let arr: &[u8] = &[0, 2, 3];
arr as [char];
//~^ ERROR cast to unsized type
}
19 changes: 19 additions & 0 deletions tests/ui/cast/cast-to-slice.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
error[E0620]: cast to unsized type: `&[u8]` as `[char]`
--> $DIR/cast-to-slice.rs:2:5
|
LL | "example".as_bytes() as [char];
| ^^^^^^^^^^^^^^^^^^^^^^^^------
| |
| help: try casting to a reference instead: `&[char]`

error[E0620]: cast to unsized type: `&[u8]` as `[char]`
--> $DIR/cast-to-slice.rs:6:5
|
LL | arr as [char];
| ^^^^^^^------
| |
| help: try casting to a reference instead: `&[char]`

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0620`.
10 changes: 3 additions & 7 deletions tests/ui/error-codes/E0620.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,9 @@ error[E0620]: cast to unsized type: `&[usize; 2]` as `[usize]`
--> $DIR/E0620.rs:2:16
|
LL | let _foo = &[1_usize, 2] as [usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
help: consider using an implicit coercion to `&[usize]` instead
--> $DIR/E0620.rs:2:16
|
LL | let _foo = &[1_usize, 2] as [usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^-------
| |
| help: try casting to a reference instead: `&[usize]`

error: aborting due to 1 previous error

Expand Down
10 changes: 3 additions & 7 deletions tests/ui/issues/issue-17441.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,9 @@ error[E0620]: cast to unsized type: `&[usize; 2]` as `[usize]`
--> $DIR/issue-17441.rs:2:16
|
LL | let _foo = &[1_usize, 2] as [usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
help: consider using an implicit coercion to `&[usize]` instead
--> $DIR/issue-17441.rs:2:16
|
LL | let _foo = &[1_usize, 2] as [usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^^^^^^^^^^^^-------
| |
| help: try casting to a reference instead: `&[usize]`

error[E0620]: cast to unsized type: `Box<usize>` as `dyn Debug`
--> $DIR/issue-17441.rs:5:16
Expand Down

0 comments on commit b21d0e5

Please sign in to comment.