]> git.lizzy.rs Git - rust.git/blob - src/test/ui/nll/type-check-pointer-comparisons.rs
Rollup merge of #103146 - joboet:cleanup_pthread_condvar, r=Mark-Simulacrum
[rust.git] / src / test / ui / nll / type-check-pointer-comparisons.rs
1 // Check that we assert that pointers have a common subtype for comparisons
2
3 fn compare_const<'a, 'b>(x: *const &mut &'a i32, y: *const &mut &'b i32) {
4     x == y;
5     //~^ ERROR lifetime may not live long enough
6     //~| ERROR lifetime may not live long enough
7 }
8
9 fn compare_mut<'a, 'b>(x: *mut &'a i32, y: *mut &'b i32) {
10     x == y;
11     //~^ ERROR lifetime may not live long enough
12     //~| ERROR lifetime may not live long enough
13 }
14
15 fn compare_fn_ptr<'a, 'b, 'c>(f: fn(&'c mut &'a i32), g: fn(&'c mut &'b i32)) {
16     f == g;
17     //~^ ERROR lifetime may not live long enough
18     //~| ERROR lifetime may not live long enough
19 }
20
21 fn compare_hr_fn_ptr<'a>(f: fn(&'a i32), g: fn(&i32)) {
22     // Ideally this should compile with the operands swapped as well, but HIR
23     // type checking prevents it (and stops compilation) for now.
24     f == g; // OK
25 }
26
27 fn compare_const_fn_ptr<'a>(f: *const fn(&'a i32), g: *const fn(&i32)) {
28     f == g; // OK
29 }
30
31 fn main() {}