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),
|
(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…
x
Reference in New Issue
Block a user