[gcc r14-7919] gccrs: improve name mangling hash

Arthur Cohen cohenarthur@gcc.gnu.org
Tue Jan 16 18:07:20 GMT 2024


https://gcc.gnu.org/g:18464d32dad7296a370bd8ce6746eac32e00ef52

commit r14-7919-g18464d32dad7296a370bd8ce6746eac32e00ef52
Author: Philip Herron <herron.philip@googlemail.com>
Date:   Sat Aug 12 18:18:51 2023 +0100

    gccrs: improve name mangling hash
    
    We can endup with duplicate symbol names for different intrinsics with our
    current hash setup. This adds in the mappings and extra info to improve
    hash uniqueness.
    
    Addresses #1895
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-intrinsic.cc (check_for_cached_intrinsic):
            simplify this cached intrinsic check
            * backend/rust-mangle.cc (legacy_mangle_item): use new interface
            * typecheck/rust-tyty.h: new managle helper
    
    Signed-off-by: Philip Herron <herron.philip@googlemail.com>

Diff:
---
 gcc/rust/backend/rust-compile-intrinsic.cc | 13 ++++---------
 gcc/rust/backend/rust-mangle.cc            |  2 +-
 gcc/rust/typecheck/rust-tyty.h             |  6 ++++++
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-intrinsic.cc b/gcc/rust/backend/rust-compile-intrinsic.cc
index b73c5433cd4..b5cb84b22a9 100644
--- a/gcc/rust/backend/rust-compile-intrinsic.cc
+++ b/gcc/rust/backend/rust-compile-intrinsic.cc
@@ -242,17 +242,12 @@ Intrinsics::compile (TyTy::FnType *fntype)
 static bool
 check_for_cached_intrinsic (Context *ctx, TyTy::FnType *fntype, tree *lookup)
 {
+  const Resolver::CanonicalPath &canonical_path = fntype->get_ident ().path;
+  std::string asm_name = ctx->mangle_item (fntype, canonical_path);
   if (ctx->lookup_function_decl (fntype->get_ty_ref (), lookup,
-				 fntype->get_id (), fntype))
+				 fntype->get_id (), fntype, asm_name))
     {
-      // Has this been added to the list? Then it must be finished
-      if (ctx->function_completed (*lookup))
-	{
-	  tree dummy = NULL_TREE;
-	  if (!ctx->lookup_function_decl (fntype->get_ty_ref (), &dummy))
-	    ctx->insert_function_decl (fntype, *lookup);
-	  return true;
-	}
+      return true;
     }
 
   return false;
diff --git a/gcc/rust/backend/rust-mangle.cc b/gcc/rust/backend/rust-mangle.cc
index eed9c75d96e..62530d65382 100644
--- a/gcc/rust/backend/rust-mangle.cc
+++ b/gcc/rust/backend/rust-mangle.cc
@@ -282,7 +282,7 @@ static std::string
 legacy_mangle_item (const TyTy::BaseType *ty,
 		    const Resolver::CanonicalPath &path)
 {
-  const std::string hash = legacy_hash (ty->as_string ());
+  const std::string hash = legacy_hash (ty->mangle_string ());
   const std::string hash_sig = legacy_mangle_name (hash);
 
   return kMangledSymbolPrefix + legacy_mangle_canonical_path (path) + hash_sig
diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h
index 341a0e7063f..fa2c88ccb9a 100644
--- a/gcc/rust/typecheck/rust-tyty.h
+++ b/gcc/rust/typecheck/rust-tyty.h
@@ -158,6 +158,12 @@ public:
   bool has_subsititions_defined () const;
   bool needs_generic_substitutions () const;
 
+  std::string mangle_string () const
+  {
+    return TypeKindFormat::to_string (get_kind ()) + ":" + as_string () + ":"
+	   + mappings_str () + ":" + bounds_as_string ();
+  }
+
   /* Returns a pointer to a clone of this. The caller is responsible for
    * releasing the memory of the returned ty. */
   virtual BaseType *clone () const = 0;


More information about the Gcc-cvs mailing list