[gcc r17-3068] gccrs: Export extern block metadata

Arthur Cohen via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:03ebe9a6418a729b3dadb09a0b5caf8d5b4d5eb8

commit r17-3068-g03ebe9a6418a729b3dadb09a0b5caf8d5b4d5eb8
Author: Pierre-Emmanuel Patry <[email protected]>
Date:   Sun Jun 28 04:59:01 2026 +0200

    gccrs: Export extern block metadata
    
    Extern block metadata is required to identify intrinsics from an extern
    crate.
    
    gcc/rust/ChangeLog:
    
            * metadata/rust-export-metadata.cc (ExportContext::begin_extern_block):
            Dump the prefix of an extern block.
            (ExportContext::end_extern_block): Likewise with extern block suffix.
            * metadata/rust-export-metadata.h: Add function prototypes.
    
    Signed-off-by: Pierre-Emmanuel Patry <[email protected]>

Diff:
---
 gcc/rust/metadata/rust-export-metadata.cc | 18 ++++++++++++++++++
 gcc/rust/metadata/rust-export-metadata.h  |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/gcc/rust/metadata/rust-export-metadata.cc b/gcc/rust/metadata/rust-export-metadata.cc
index 93574284c523..3388d0e920da 100644
--- a/gcc/rust/metadata/rust-export-metadata.cc
+++ b/gcc/rust/metadata/rust-export-metadata.cc
@@ -106,6 +106,18 @@ ExportContext::emit_function (AST::Function &fn)
   public_interface_buffer += oss.str ();
 }
 
+void
+ExportContext::begin_extern_block (AST::ExternBlock &block)
+{
+  public_interface_buffer += "extern \"" + block.get_abi () + "\" {\n";
+}
+
+void
+ExportContext::end_extern_block ()
+{
+  public_interface_buffer += "}\n";
+}
+
 void
 ExportContext::begin_module (const AST::Module &module)
 {
@@ -152,6 +164,12 @@ public:
   {
     ctx.emit_function (function);
   }
+  void visit (AST::ExternBlock &block) override
+  {
+    ctx.begin_extern_block (block);
+    AST::DefaultASTVisitor::visit (block);
+    ctx.end_extern_block ();
+  }
   void visit (AST::Trait &trait) override { ctx.emit_trait (trait); }
   void visit (AST::Module &module) override
   {
diff --git a/gcc/rust/metadata/rust-export-metadata.h b/gcc/rust/metadata/rust-export-metadata.h
index 399b92951757..17dc20a7d5f2 100644
--- a/gcc/rust/metadata/rust-export-metadata.h
+++ b/gcc/rust/metadata/rust-export-metadata.h
@@ -42,6 +42,8 @@ public:
 
   void emit_trait (AST::Trait &trait);
   void emit_function (AST::Function &fn);
+  void begin_extern_block (AST::ExternBlock &block);
+  void end_extern_block ();
   void emit_use_declaration (AST::UseDeclaration &use_decl);
   void begin_module (const AST::Module &module);
   void end_module (const AST::Module &module);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.