public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-5050] Generalize 'gcc/input.h:struct location_hash'
@ 2021-11-09 13:45 Thomas Schwinge
  0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2021-11-09 13:45 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:088199e5d0fc0d54f48af0783a2630a773bbb387

commit r12-5050-g088199e5d0fc0d54f48af0783a2630a773bbb387
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Tue Aug 31 23:30:25 2021 +0200

    Generalize 'gcc/input.h:struct location_hash'
    
    This is currently only used here ('gcc/input.h:class string_concat_db'), but is
    actually generally useful, so advertize it as such.
    
    Per the rationale given, we may use 'BUILTINS_LOCATION' as spare value for
    'Deleted', in addition to the existing use of 'UNKNOWN_LOCATION' as spare value
    for 'Empty'.
    
            gcc/
            * input.h (location_hash): Use 'BUILTINS_LOCATION' as spare value
            for 'Deleted'.  Turn into a '#define'.

Diff:
---
 gcc/input.h | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/gcc/input.h b/gcc/input.h
index f7b08bdc444..bc44ba2507f 100644
--- a/gcc/input.h
+++ b/gcc/input.h
@@ -36,6 +36,28 @@ extern GTY(()) class line_maps *saved_line_table;
    both UNKNOWN_LOCATION and BUILTINS_LOCATION fit into that.  */
 STATIC_ASSERT (BUILTINS_LOCATION < RESERVED_LOCATION_COUNT);
 
+/* Hasher for 'location_t' values satisfying '!RESERVED_LOCATION_P', thus able
+   to use 'UNKNOWN_LOCATION'/'BUILTINS_LOCATION' as spare values for
+   'Empty'/'Deleted'.  */
+/* Per PR103157 "'gengtype': 'typedef' causing infinite-recursion code to be
+   generated", don't use
+       typedef int_hash<location_t, UNKNOWN_LOCATION, BUILTINS_LOCATION>
+         location_hash;
+   here.
+
+   It works for a single-use case, but when using a 'struct'-based variant
+       struct location_hash
+         : int_hash<location_t, UNKNOWN_LOCATION, BUILTINS_LOCATION> {};
+   in more than one place, 'gengtype' generates duplicate functions (thus:
+   "error: redefinition of 'void gt_ggc_mx(location_hash&)'" etc.).
+   Attempting to mark that one up with GTY options, we run into a 'gengtype'
+   "parse error: expected '{', have '<'", which probably falls into category
+   "understanding of C++ is limited", as documented in 'gcc/doc/gty.texi'.
+
+   Thus, use a plain ol' '#define':
+*/
+#define location_hash int_hash<location_t, UNKNOWN_LOCATION, BUILTINS_LOCATION>
+
 extern bool is_location_from_builtin_token (location_t);
 extern expanded_location expand_location (location_t);
 
@@ -233,8 +255,6 @@ public:
   location_t * GTY ((atomic)) m_locs;
 };
 
-struct location_hash : int_hash <location_t, UNKNOWN_LOCATION> { };
-
 class GTY(()) string_concat_db
 {
  public:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-09 13:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-09 13:45 [gcc r12-5050] Generalize 'gcc/input.h:struct location_hash' Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).