mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Rollup merge of #103699 - compiler-errors:dyn-star-cast-bad, r=TaKO8Ki
Emit proper error when casting to `dyn*` Fixes #103679
This commit is contained in:
commit
679771f147
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
13
src/test/ui/dyn-star/no-explicit-dyn-star-cast.rs
Normal file
13
src/test/ui/dyn-star/no-explicit-dyn-star-cast.rs
Normal file
@ -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
src/test/ui/dyn-star/no-explicit-dyn-star-cast.stderr
Normal file
28
src/test/ui/dyn-star/no-explicit-dyn-star-cast.stderr
Normal file
@ -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
src/test/ui/dyn-star/no-explicit-dyn-star.rs
Normal file
8
src/test/ui/dyn-star/no-explicit-dyn-star.rs
Normal file
@ -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
src/test/ui/dyn-star/no-explicit-dyn-star.stderr
Normal file
9
src/test/ui/dyn-star/no-explicit-dyn-star.stderr
Normal file
@ -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`.
|
Loading…
Reference in New Issue
Block a user