blob: 7d21307e1b2d99ca4b07f69916a5cb401072142f [file] [log] [blame] [edit]
//@ check-pass
#![allow(improper_ctypes_definitions)]
#![feature(unsized_fn_params)]
#![crate_type = "lib"]
struct Fat<T: ?Sized>(T);
// Check that computing the fn abi for `bad`, with a external ABI fn ptr that is not FFI-safe, does
// not ICE.
pub fn bad(f: extern "C" fn([u8])) {}
// While these get accepted, they should also not ICE.
// (If we ever reject them, remove them from this test to ensure the `bad` above
// is still tested. Do *not* make this a check/build-fail test.)
pub extern "C" fn declare_bad(_x: str) {}
#[no_mangle]
pub extern "system" fn declare_more_bad(f: dyn FnOnce()) {
}
fn make_bad() -> extern "C" fn(Fat<[u8]>) {
todo!()
}
pub fn call_bad() {
let f = make_bad();
let slice: Box<Fat<[u8]>> = Box::new(Fat([1; 8]));
f(*slice);
}