https://gcc.gnu.org/g:29cace33c167fd22cf91f3f2f982e70f082db69f

commit 29cace33c167fd22cf91f3f2f982e70f082db69f
Author: Philip Herron <herron.phi...@googlemail.com>
Date:   Thu Mar 27 15:15:08 2025 +0000

    gccrs: Give the builtin unit struct an actual locus
    
    This has been a pet peeve of mine for a while because the gimple never
    emitted the struct () name properly it was always empty which for record
    types they always require a real locus or they dont get a proper name.
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-base.cc (HIRCompileBase::unit_expression): 
pass ctx
            * backend/rust-compile-base.h: cant be static
            * backend/rust-compile-intrinsic.cc (try_handler_inner): pass ctx
            * backend/rust-compile-type.cc
            (TyTyResolveCompile::get_unit_type): update to grab the first locus
            (TyTyResolveCompile::visit): pass ctx
            * backend/rust-compile-type.h: likewise
    
    Signed-off-by: Philip Herron <herron.phi...@googlemail.com>

Diff:
---
 gcc/rust/backend/rust-compile-base.cc      |  2 +-
 gcc/rust/backend/rust-compile-base.h       |  2 +-
 gcc/rust/backend/rust-compile-intrinsic.cc |  2 +-
 gcc/rust/backend/rust-compile-type.cc      | 17 +++++++++++++----
 gcc/rust/backend/rust-compile-type.h       |  2 +-
 5 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-base.cc 
b/gcc/rust/backend/rust-compile-base.cc
index c71417da41eb..d8a71f5d7eb6 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -1023,7 +1023,7 @@ HIRCompileBase::resolve_method_address (TyTy::FnType 
*fntype,
 tree
 HIRCompileBase::unit_expression (location_t locus)
 {
-  tree unit_type = TyTyResolveCompile::get_unit_type ();
+  tree unit_type = TyTyResolveCompile::get_unit_type (ctx);
   return Backend::constructor_expression (unit_type, false, {}, -1, locus);
 }
 
diff --git a/gcc/rust/backend/rust-compile-base.h 
b/gcc/rust/backend/rust-compile-base.h
index 4d55407ca3b9..323b1a025226 100644
--- a/gcc/rust/backend/rust-compile-base.h
+++ b/gcc/rust/backend/rust-compile-base.h
@@ -110,7 +110,7 @@ protected:
                         const Resolver::CanonicalPath &canonical_path,
                         TyTy::FnType *fntype);
 
-  static tree unit_expression (location_t locus);
+  tree unit_expression (location_t locus);
 
   void setup_fndecl (tree fndecl, bool is_main_entry_point, bool is_generic_fn,
                     HIR::Visibility &visibility,
diff --git a/gcc/rust/backend/rust-compile-intrinsic.cc 
b/gcc/rust/backend/rust-compile-intrinsic.cc
index 31c5d49b0ab2..cd79a7bd0b9a 100644
--- a/gcc/rust/backend/rust-compile-intrinsic.cc
+++ b/gcc/rust/backend/rust-compile-intrinsic.cc
@@ -1322,7 +1322,7 @@ try_handler_inner (Context *ctx, TyTy::FnType *fntype, 
bool is_new_api)
 
   if (is_new_api)
     {
-      auto ret_type = TyTyResolveCompile::get_unit_type ();
+      auto ret_type = TyTyResolveCompile::get_unit_type (ctx);
       auto ret_expr = Backend::constructor_expression (ret_type, false, {}, -1,
                                                       UNDEF_LOCATION);
       normal_return_stmt
diff --git a/gcc/rust/backend/rust-compile-type.cc 
b/gcc/rust/backend/rust-compile-type.cc
index 58a0d9aaf586..0ab9e420b5dd 100644
--- a/gcc/rust/backend/rust-compile-type.cc
+++ b/gcc/rust/backend/rust-compile-type.cc
@@ -81,13 +81,22 @@ TyTyResolveCompile::get_implicit_enumeral_node_type 
(TyTy::BaseType *repr)
 }
 
 tree
-TyTyResolveCompile::get_unit_type ()
+TyTyResolveCompile::get_unit_type (Context *ctx)
 {
   static tree unit_type;
   if (unit_type == nullptr)
     {
+      auto cn = ctx->get_mappings ().get_current_crate ();
+      auto &c = ctx->get_mappings ().get_ast_crate (cn);
+      location_t locus = BUILTINS_LOCATION;
+      if (c.items.size () > 0)
+       {
+         auto &item = c.items[0];
+         locus = item->get_locus ();
+       }
+
       auto unit_type_node = Backend::struct_type ({});
-      unit_type = Backend::named_type ("()", unit_type_node, 
BUILTINS_LOCATION);
+      unit_type = Backend::named_type ("()", unit_type_node, locus);
     }
   return unit_type;
 }
@@ -421,7 +430,7 @@ TyTyResolveCompile::visit (const TyTy::TupleType &type)
 {
   if (type.num_fields () == 0)
     {
-      translated = get_unit_type ();
+      translated = get_unit_type (ctx);
       return;
     }
 
@@ -724,7 +733,7 @@ TyTyResolveCompile::visit (const TyTy::StrType &type)
 void
 TyTyResolveCompile::visit (const TyTy::NeverType &)
 {
-  translated = get_unit_type ();
+  translated = get_unit_type (ctx);
 }
 
 void
diff --git a/gcc/rust/backend/rust-compile-type.h 
b/gcc/rust/backend/rust-compile-type.h
index b8976e97ac53..aa20067fc477 100644
--- a/gcc/rust/backend/rust-compile-type.h
+++ b/gcc/rust/backend/rust-compile-type.h
@@ -30,7 +30,7 @@ public:
   static tree compile (Context *ctx, const TyTy::BaseType *ty,
                       bool trait_object_mode = false);
 
-  static tree get_unit_type ();
+  static tree get_unit_type (Context *ctx);
 
   void visit (const TyTy::InferType &) override;
   void visit (const TyTy::ADTType &) override;

Reply via email to