mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-15 03:09:54 +00:00
44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
#![feature(unsafe_binders)]
|
|
//~^ WARN the feature `unsafe_binders` is incomplete
|
|
|
|
use std::unsafe_binder::{wrap_binder, unwrap_binder};
|
|
|
|
fn a() {
|
|
let _: unsafe<'a> &'a i32 = wrap_binder!(&());
|
|
//~^ ERROR unsafe binder casts are not fully implemented
|
|
//~| ERROR mismatched types
|
|
}
|
|
|
|
fn b() {
|
|
let _: i32 = wrap_binder!(&());
|
|
//~^ ERROR unsafe binder casts are not fully implemented
|
|
//~| ERROR `wrap_binder!()` can only wrap into unsafe binder
|
|
}
|
|
|
|
fn c() {
|
|
let y = 1;
|
|
unwrap_binder!(y);
|
|
//~^ ERROR unsafe binder casts are not fully implemented
|
|
//~| ERROR expected unsafe binder, found integer as input
|
|
}
|
|
|
|
fn d() {
|
|
let unknown = Default::default();
|
|
unwrap_binder!(unknown);
|
|
//~^ ERROR unsafe binder casts are not fully implemented
|
|
// FIXME(unsafe_binders): This should report ambiguity once we've removed
|
|
// the error above which taints the infcx.
|
|
}
|
|
|
|
fn e() {
|
|
let x = wrap_binder!(&42);
|
|
//~^ ERROR unsafe binder casts are not fully implemented
|
|
// Currently, type inference doesn't flow backwards for unsafe binders.
|
|
// It could, perhaps, but that may cause even more surprising corners.
|
|
// FIXME(unsafe_binders): This should report ambiguity once we've removed
|
|
// the error above which taints the infcx.
|
|
let _: unsafe<'a> &'a i32 = x;
|
|
}
|
|
|
|
fn main() {}
|