This will allow us to revert our dependency on extern types, which would
help our godbolt build as well as our various builders.
gcc/rust/ChangeLog:
* checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs: Remove extern
type feature.
* checks/errors/borrowck/ffi-polonius/src/lib.rs: Define FFIVector
per the nomicon's recommendation
https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
// ```
include!("gccrs_ffi_generated.rs");
+use std::marker::{PhantomData, PhantomPinned};
+
use crate::GccrsAtom;
-// Using opqaue types
-extern "C" {
- pub type FFIVector;
+// We define an opaque C type per the nomicon's recommendation:
+// https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
+#[repr(C)]
+pub struct FFIVector {
+ _empty: [u8; 0],
+ marker: PhantomData<(*mut u8, PhantomPinned)>,
}
impl<T1, T2> Into<(GccrsAtom, GccrsAtom)> for Pair<T1, T2>
// along with GCC; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#![feature(extern_types)]
-
mod gccrs_ffi;
use gccrs_ffi::FFIVector;