| //@ check-pass | |
| #![deny(dangling_pointers_from_temporaries)] | |
| // The original code example comes from bindgen-produced code for emacs. | |
| // Hence the name of the test. | |
| // https://github.com/rust-lang/rust/pull/128985#issuecomment-2338951363 | |
| use std::ffi::{c_char, CString}; | |
| fn read(ptr: *const c_char) -> c_char { | |
| unsafe { ptr.read() } | |
| } | |
| fn main() { | |
| let fnptr: Option<fn(ptr: *const c_char) -> c_char> = Some(read); | |
| let x = fnptr.unwrap()(CString::new("foo").unwrap().as_ptr()); | |
| assert_eq!(x as u8, b'f'); | |
| } |