Skip to content

Commit

Permalink
Don't bug if we're trying to cast dyn* to a nother type
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Dec 14, 2022
1 parent ba64ba8 commit d0db327
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
4 changes: 3 additions & 1 deletion compiler/rustc_hir_typeck/src/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -847,13 +847,15 @@ impl<'a, 'tcx> CastCheck<'tcx> {

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

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

(DynStar, _) => Err(CastError::IllegalCast),
}
}

Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/dyn-star/dyn-to-rigid.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#![feature(dyn_star)]
#![allow(incomplete_features)]

trait Tr {}

fn f(x: dyn* Tr) -> usize {
x as usize
//~^ ERROR casting `(dyn* Tr + 'static)` as `usize` is invalid
}

fn main() {}
9 changes: 9 additions & 0 deletions src/test/ui/dyn-star/dyn-to-rigid.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0606]: casting `(dyn* Tr + 'static)` as `usize` is invalid
--> $DIR/dyn-to-rigid.rs:7:5
|
LL | x as usize
| ^^^^^^^^^^

error: aborting due to previous error

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

0 comments on commit d0db327

Please sign in to comment.