]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Reuse generic string hash for invocation signatures
authorPiotr Trojanek <trojanek@adacore.com>
Thu, 3 Feb 2022 18:55:34 +0000 (19:55 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 12 May 2022 12:38:33 +0000 (12:38 +0000)
Use a generic string hash routine for hashing of invocation signatures.
The System.String_Hash unit was added to GNAT in 2009 and shouldn't
cause any bootstrap problems these days. To be safe, we don't use the
GNAT.String_Hash renaming, which was added later.

Cleanup related to a new restriction No_Uninitialized_Local_Scalars,
which will also rely on GNAT hash tables. Semantics is unaffected.

gcc/ada/

* ali.adb (Hash): Reuse GNAT.String_Hash.Hash and don't pollute
the Name_Id table.

gcc/ada/ali.adb

index 1c3b5cc725c43feab5c7ce4d77efc6888dbaf467..984e9ca7c5a60c58c4d359265292b8f319197aa1 100644 (file)
@@ -33,6 +33,7 @@ with Snames; use Snames;
 
 with GNAT;                 use GNAT;
 with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
+with System.String_Hash;
 
 package body ALI is
 
@@ -578,20 +579,18 @@ package body ALI is
    function Hash
      (IS_Rec : Invocation_Signature_Record) return Bucket_Range_Type
    is
+      function String_Hash is new System.String_Hash.Hash
+        (Char_Type => Character,
+         Key_Type  => String,
+         Hash_Type => Bucket_Range_Type);
+
       Buffer : Bounded_String (2052);
-      IS_Nam : Name_Id;
 
    begin
-      --  The hash is obtained in the following manner:
-      --
-      --    * A String signature based on the scope, name, line number, column
-      --      number, and locations, in the following format:
+      --  The hash is obtained from a signature based on the scope, name, line
+      --  number, column number, and locations, in the following format:
       --
       --         scope__name__line_column__locations
-      --
-      --    * The String is converted into a Name_Id
-      --
-      --    * The absolute value of the Name_Id is used as the hash
 
       Append (Buffer, IS_Rec.Scope);
       Append (Buffer, "__");
@@ -606,8 +605,7 @@ package body ALI is
          Append (Buffer, IS_Rec.Locations);
       end if;
 
-      IS_Nam := Name_Find (Buffer);
-      return Bucket_Range_Type (abs IS_Nam);
+      return String_Hash (To_String (Buffer));
    end Hash;
 
    --------------------