diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2022-02-03 19:55:34 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2022-05-12 12:38:33 +0000 |
commit | d889e404c80685bf720fe2dd0f70a9baeb148791 (patch) | |
tree | e1536cfe5eec255ecf1e30d8d4b461800f343a21 | |
parent | e3e51e753a61917e3f3b286740a39357ac8c954f (diff) | |
download | gcc-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.
-rw-r--r-- | gcc/ada/ali.adb | 20 |
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; -------------------- |