mirror of https://github.com/rust-lang/rust
130 lines
3.9 KiB
Rust
130 lines
3.9 KiB
Rust
struct NotClone;
|
|
|
|
fn main() {
|
|
clone_thing(&NotClone);
|
|
}
|
|
|
|
fn clone_thing(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
nc.clone()
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing2(nc: &NotClone) -> NotClone {
|
|
let nc: NotClone = nc.clone();
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected due to this
|
|
//~| NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
nc
|
|
}
|
|
|
|
fn clone_thing3(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let nc = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
nc
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing4(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let nc = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
let nc2 = nc;
|
|
nc2
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
impl NotClone {
|
|
fn other_fn(&self) {}
|
|
fn get_ref_notclone(&self) -> &Self {
|
|
self
|
|
}
|
|
}
|
|
|
|
fn clone_thing5(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let nc = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
let nc2 = nc;
|
|
nc2.other_fn();
|
|
let nc3 = nc2;
|
|
nc3
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing6(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let (ret, _) = (nc.clone(), 1);
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
let _ = nc.clone();
|
|
ret
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing7(nc: Vec<&NotClone>) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let ret = nc[0].clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
ret
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing8(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let ret = {
|
|
let a = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
a
|
|
};
|
|
ret
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing9(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let cl = || nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
let ret = cl();
|
|
ret
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing10(nc: &NotClone) -> (NotClone, NotClone) {
|
|
let (a, b) = {
|
|
let a = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
(a, nc.clone())
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
};
|
|
(a, b)
|
|
//~^ ERROR mismatched type
|
|
//~| ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|
|
|
|
fn clone_thing11(nc: &NotClone) -> NotClone {
|
|
//~^ NOTE expected `NotClone` because of return type
|
|
let a = {
|
|
let nothing = nc.clone();
|
|
let a = nc.clone();
|
|
//~^ NOTE `NotClone` does not implement `Clone`, so `&NotClone` was cloned instead
|
|
let nothing = nc.clone();
|
|
a
|
|
};
|
|
a
|
|
//~^ ERROR mismatched type
|
|
//~| NOTE expected `NotClone`, found `&NotClone`
|
|
}
|