aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/checks/errors
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2024-07-26 11:04:46 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-19 15:32:01 +0100
commitc53ff58924fa162cef5a444dcc35db7da8037249 (patch)
treed44a6b728380bf822394bb1998fcf494f677dd01 /gcc/rust/checks/errors
parent4d6b34b669c4d274ce80baeedc7b29b4e719efdc (diff)
downloadgcc-c53ff58924fa162cef5a444dcc35db7da8037249.zip
gcc-c53ff58924fa162cef5a444dcc35db7da8037249.tar.gz
gcc-c53ff58924fa162cef5a444dcc35db7da8037249.tar.bz2
gccrs: ffi-polonius: Remove usage of extern types.
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
Diffstat (limited to 'gcc/rust/checks/errors')
-rw-r--r--gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs11
-rw-r--r--gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs2
2 files changed, 8 insertions, 5 deletions
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs b/gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs
index 0cb85078..7377e3a 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs
@@ -30,11 +30,16 @@
// ```
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>
diff --git a/gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs b/gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs
index 782a63f..c5c0ae9 100644
--- a/gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs
+++ b/gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs
@@ -16,8 +16,6 @@
// 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;