Skip to content

Commit

Permalink
Rollup merge of #103699 - compiler-errors:dyn-star-cast-bad, r=TaKO8Ki
Browse files Browse the repository at this point in the history
Emit proper error when casting to `dyn*`

Fixes #103679
  • Loading branch information
GuillaumeGomez committed Oct 29, 2022
2 parents 05ab16b + c442013 commit 679771f
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_hir_typeck/src/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,13 @@ impl<'a, 'tcx> CastCheck<'tcx> {

(Int(_) | Float, Int(_) | Float) => Ok(CastKind::NumericCast),

(_, DynStar) | (DynStar, _) => bug!("should be handled by `try_coerce`"),
(_, DynStar) | (DynStar, _) => {
if fcx.tcx.features().dyn_star {
bug!("should be handled by `try_coerce`")
} else {
Err(CastError::IllegalCast)
}
}
}
}

Expand Down
13 changes: 13 additions & 0 deletions src/test/ui/dyn-star/no-explicit-dyn-star-cast.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use std::fmt::Debug;

fn make_dyn_star() {
let i = 42usize;
let dyn_i: dyn* Debug = i as dyn* Debug;
//~^ ERROR casting `usize` as `dyn* Debug` is invalid
//~| ERROR dyn* trait objects are unstable
//~| ERROR dyn* trait objects are unstable
}

fn main() {
make_dyn_star();
}
28 changes: 28 additions & 0 deletions src/test/ui/dyn-star/no-explicit-dyn-star-cast.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
error[E0658]: dyn* trait objects are unstable
--> $DIR/no-explicit-dyn-star-cast.rs:5:16
|
LL | let dyn_i: dyn* Debug = i as dyn* Debug;
| ^^^^^^^^^^
|
= note: see issue #91611 <https://github.com/rust-lang/rust/issues/91611> for more information
= help: add `#![feature(dyn_star)]` to the crate attributes to enable

error[E0658]: dyn* trait objects are unstable
--> $DIR/no-explicit-dyn-star-cast.rs:5:34
|
LL | let dyn_i: dyn* Debug = i as dyn* Debug;
| ^^^^^^^^^^
|
= note: see issue #91611 <https://github.com/rust-lang/rust/issues/91611> for more information
= help: add `#![feature(dyn_star)]` to the crate attributes to enable

error[E0606]: casting `usize` as `dyn* Debug` is invalid
--> $DIR/no-explicit-dyn-star-cast.rs:5:29
|
LL | let dyn_i: dyn* Debug = i as dyn* Debug;
| ^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0606, E0658.
For more information about an error, try `rustc --explain E0606`.
8 changes: 8 additions & 0 deletions src/test/ui/dyn-star/no-explicit-dyn-star.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// aux-build:dyn-star-foreign.rs

extern crate dyn_star_foreign;

fn main() {
dyn_star_foreign::require_dyn_star_display(1usize as _);
//~^ ERROR casting `usize` as `dyn* std::fmt::Display` is invalid
}
9 changes: 9 additions & 0 deletions src/test/ui/dyn-star/no-explicit-dyn-star.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0606]: casting `usize` as `dyn* std::fmt::Display` is invalid
--> $DIR/no-explicit-dyn-star.rs:6:48
|
LL | dyn_star_foreign::require_dyn_star_display(1usize as _);
| ^^^^^^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0606`.

0 comments on commit 679771f

Please sign in to comment.