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).