Skip to content

Commit

Permalink
Rollup merge of rust-lang#137637 - compiler-errors:dyn-cast-from-dyn-…
Browse files Browse the repository at this point in the history
…star, r=oli-obk

Check dyn flavor before registering upcast goal on wide pointer cast in MIR typeck

See the comment on the test :)

Fixes rust-lang#137579
  • Loading branch information
jieyouxu authored Mar 5, 2025
2 parents 4295c8e + adff091 commit 3470029
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_borrowck/src/type_check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2120,8 +2120,8 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
//
// Note that other checks (such as denying `dyn Send` -> `dyn
// Debug`) are in `rustc_hir_typeck`.
if let ty::Dynamic(src_tty, _src_lt, _) = *src_tail.kind()
&& let ty::Dynamic(dst_tty, dst_lt, _) = *dst_tail.kind()
if let ty::Dynamic(src_tty, _src_lt, ty::Dyn) = *src_tail.kind()
&& let ty::Dynamic(dst_tty, dst_lt, ty::Dyn) = *dst_tail.kind()
&& src_tty.principal().is_some()
&& dst_tty.principal().is_some()
{
Expand Down
19 changes: 19 additions & 0 deletions tests/ui/traits/trait-upcasting/dyn-to-dyn-star.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// While somewhat nonsensical, this is a cast from a wide pointer to a thin pointer.
// Thus, we don't need to check an unsize goal here; there isn't any vtable casting
// happening at all.

// Regression test for <https://github.com/rust-lang/rust/issues/137579>.

//@ check-pass

#![allow(incomplete_features)]
#![feature(dyn_star)]

trait Foo {}
trait Bar {}

fn cast(x: *const dyn Foo) {
x as *const dyn* Bar;
}

fn main() {}

0 comments on commit 3470029

Please sign in to comment.