https://gcc.gnu.org/g:9de294a6848ede43833b9e225e3df56b4b3e5194

commit 9de294a6848ede43833b9e225e3df56b4b3e5194
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Fri Jul 26 11:04:46 2024 +0200

    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

Diff:
---
 gcc/rust/checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs | 11 ++++++++---
 gcc/rust/checks/errors/borrowck/ffi-polonius/src/lib.rs       |  2 --
 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 5740271de622..7e839f035819 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 1bcb89c326b1..e254238bc4c5 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;

Reply via email to