Testcase:
struct S(String);
impl S {
fn f(self: *mut S) -> String { self.0 }
}
fn main() { S("".to_owned()).f(); }
This somehow compiles and runs without any errors.
I'm not sure how exactly this is getting interpreted by the compiler, but it seems dubious at best.