]> git.ipfire.org Git - thirdparty/gcc.git/commit
gccrs: Improve libformat_parser FFI
authorOwen Avery <powerboat9.gamer@gmail.com>
Wed, 13 Aug 2025 00:02:55 +0000 (20:02 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 30 Oct 2025 19:58:41 +0000 (20:58 +0100)
commitc8461400fd24e4aa166d2c9b25825665d0535ff6
tree0e1cfa1c19b2bed9db347b1737e4f096312d36c3
parentb76bb3f2260bdbf61577585f2a4476ba88b57c12
gccrs: Improve libformat_parser FFI

This should remove a use-after-free as well as simplify the FFI
interface.

gcc/rust/ChangeLog:

* ast/rust-fmt.cc (Pieces::collect): Handle changes to ffi
interface.
(Pieces::~Pieces): Remove function definition.
(Pieces::Pieces): Likewise.
(Pieces::operator=): Likewise.
* ast/rust-fmt.h: Include "optional.h".
(rust_ffi_alloc): New extern "C" function declaration.
(rust_ffi_dealloc): Likewise.
(class FFIVec): New class.
(class FFIOpt): Likewise.
(RustHamster::RustHamster): New constructor accepting const
std::string reference.
(struct FormatSpec): Use FFIOpt.
(struct PieceSlice): Remove struct.
(struct RustString): Likewise.
(struct FormatArgsHandle): Likewise.
(collect_pieces): Change function signature.
(clone_pieces): Likewise.
(destroy_pieces): Remove extern "C" function declaration.
(Pieces::~Pieces): Remove function declaration.
(Pieces::operator=): Likewise.
(Pieces::get_pieces): Handle changes to class fields.
(Pieces::Pieces): Remove copy and move constructor declarations,
adjust signature of remaining constructor declaration.
(Pieces::pieces_vector): Remove member variable.
(Pieces::handle): Likewise.
(Pieces::data): Add member variable.
* expand/rust-macro-builtins-asm.cc (expand_inline_asm_strings):
Use references to avoid copying.

libgrust/ChangeLog:

* libformat_parser/src/lib.rs (struct FFIVec): New.
(trait StringLeakExt): Remove.
(struct FFIOpt): New.
(trait IntoFFI): Adjust implementation for Option.
(struct RustHamster): Add lifetime and adjust conversion to and
from &str.
(enum Piece): Adjust definition to handle changes to
RustHamster.
(struct Argument): Likewise.
(struct FormatSpec): Use FFIOpt and RustHamster.
(enum Position): Use RustHamster.
(enum Count): Likewise.
(struct PieceSlice): Replace with...
(typedef PieceVec): ...this.
(struct RustString): Remove.
(struct FormatArgsHandle): Likewise.
(fn collect_pieces): Adjust signature, greatly simplifying
implementation.
(fn clone_pieces): Likewise.
(fn destroy_pieces): Remove.
(trait LayoutExt): New.
(fn rust_ffi_alloc): New.
(fn rust_ffi_dealloc): New.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/ast/rust-fmt.cc
gcc/rust/ast/rust-fmt.h
gcc/rust/expand/rust-macro-builtins-asm.cc
libgrust/libformat_parser/src/lib.rs