Skip to content

Commit

Permalink
Don't CoerceUnsized dyn* to dyn*
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Nov 10, 2022
1 parent 0af211a commit 6e6c49e
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {

match (source.kind(), target.kind()) {
// Trait+Kx+'a -> Trait+Ky+'b (upcasts).
(&ty::Dynamic(ref data_a, ..), &ty::Dynamic(ref data_b, ..)) => {
(&ty::Dynamic(ref data_a, _, ty::Dyn), &ty::Dynamic(ref data_b, _, ty::Dyn)) => {
// Upcast coercions permit several things:
//
// 1. Dropping auto traits, e.g., `Foo + Send` to `Foo`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1145,7 +1145,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
}));
}

_ => bug!(),
_ => bug!("source: {source}, target: {target}"),
};

Ok(ImplSourceBuiltinData { nested })
Expand Down
26 changes: 26 additions & 0 deletions src/test/ui/dyn-star/dont-unsize-coerce-dyn-star.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// check-pass

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

trait AddOne {
fn add1(&mut self) -> usize;
}

impl AddOne for usize {
fn add1(&mut self) -> usize {
*self += 1;
*self
}
}

fn add_one(i: &mut (dyn* AddOne + '_)) -> usize {
i.add1()
}

fn main() {
let mut x = 42usize as dyn* AddOne;

println!("{}", add_one(&mut x));
println!("{}", add_one(&mut x));
}

0 comments on commit 6e6c49e

Please sign in to comment.