aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2022-02-03 19:55:34 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2022-05-12 12:38:33 +0000
commitd889e404c80685bf720fe2dd0f70a9baeb148791 (patch)
treee1536cfe5eec255ecf1e30d8d4b461800f343a21 /gcc
parente3e51e753a61917e3f3b286740a39357ac8c954f (diff)
downloadgcc-d889e404c80685bf720fe2dd0f70a9baeb148791.zip
gcc-d889e404c80685bf720fe2dd0f70a9baeb148791.tar.gz
gcc-d889e404c80685bf720fe2dd0f70a9baeb148791.tar.bz2
[Ada] Reuse generic string hash for invocation signatures
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ali.adb20
1 files changed, 9 insertions, 11 deletions
diff --git a/gcc/ada/ali.adb b/gcc/ada/ali.adb
index 1c3b5cc..984e9ca 100644
--- a/gcc/ada/ali.adb
+++ b/gcc/ada/ali.adb
@@ -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;
--------------------