Files
rust/tests/ui/traits/trait-object-mut-to-shared-coercion.rs

41 lines
680 B
Rust
Raw Normal View History

2025-07-01 00:43:31 +05:00
//! Tests that coercion from `&mut dyn Trait` to `&dyn Trait` works correctly.
2025-07-01 00:43:31 +05:00
//@ run-pass
trait Foo {
fn foo(&self) -> usize;
fn bar(&mut self) -> usize;
}
impl Foo for usize {
fn foo(&self) -> usize {
*self
}
fn bar(&mut self) -> usize {
*self += 1;
*self
}
}
2019-05-28 14:47:21 -04:00
fn do_it_mut(obj: &mut dyn Foo) {
let x = obj.bar();
let y = obj.foo();
assert_eq!(x, y);
do_it_imm(obj, y);
}
2019-05-28 14:47:21 -04:00
fn do_it_imm(obj: &dyn Foo, v: usize) {
let y = obj.foo();
assert_eq!(v, y);
}
pub fn main() {
let mut x: usize = 22;
2019-05-28 14:47:21 -04:00
let obj = &mut x as &mut dyn Foo;
do_it_mut(obj);
do_it_imm(obj, 23);
do_it_mut(obj);
}