aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2023-07-05 08:38:49 +0200
committerThomas Schwinge <thomas@codesourcery.com>2023-07-06 11:59:08 +0200
commit62db795a8fdec8b618a61e40a9e2716768d50d90 (patch)
tree7427afda04cec6818c7a031a4faef9831fc92ac2
parentee8ed948c1f659d10f5c19e4d51bd8a79369762b (diff)
downloadgcc-62db795a8fdec8b618a61e40a9e2716768d50d90.zip
gcc-62db795a8fdec8b618a61e40a9e2716768d50d90.tar.gz
gcc-62db795a8fdec8b618a61e40a9e2716768d50d90.tar.bz2
GTY: Enhance 'string_length' option documentation
We're (currently) not aware of any actual use of 'ht_identifier's with NUL characters embedded; its 'len' field appears to exist for optimization purposes, since "forever". Before 'struct ht_identifier' was added in commit 2a967f3d3a45294640e155381ef549e0b8090ad4 (Subversion r42334), we had in 'gcc/cpplib.h:struct cpp_hashnode': 'unsigned short len', or earlier 'length', earlier in 'gcc/cpphash.h:struct hashnode': 'unsigned short length', earlier 'size_t length' with comment: "length of token, for quick comparison", earlier 'int length', ever since the 'gcc/cpp*' files were added in commit 7f2935c734c36f84ab62b20a04de465e19061333 (Subversion r9191). This amends commit f3b957ea8b9dadfb1ed30f24f463529684b7a36a "pch: Fix streaming of strings with embedded null bytes". gcc/ * doc/gty.texi (GTY Options) <string_length>: Enhance. libcpp/ * include/symtab.h (struct ht_identifier): Document different rationale.
-rw-r--r--gcc/doc/gty.texi11
-rw-r--r--libcpp/include/symtab.h4
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/doc/gty.texi b/gcc/doc/gty.texi
index 7bd064b..15f9fa0 100644
--- a/gcc/doc/gty.texi
+++ b/gcc/doc/gty.texi
@@ -217,6 +217,17 @@ struct GTY(()) non_terminated_string @{
@};
@end smallexample
+Similarly, this is useful for (regular NUL-terminated) strings with
+NUL characters embedded (that the default @code{strlen} use would run
+afoul of):
+
+@smallexample
+struct GTY(()) multi_string @{
+ const char * GTY((string_length ("%h.len + 1"))) str;
+ size_t len;
+@};
+@end smallexample
+
The @code{string_length} option currently is not supported for (fields
in) global variables.
@c <https://inbox.sourceware.org/87bkgqvlst.fsf@euler.schwinge.homeip.net>
diff --git a/libcpp/include/symtab.h b/libcpp/include/symtab.h
index c7ccc6d..0c713f2 100644
--- a/libcpp/include/symtab.h
+++ b/libcpp/include/symtab.h
@@ -29,9 +29,7 @@ along with this program; see the file COPYING3. If not see
typedef struct ht_identifier ht_identifier;
typedef struct ht_identifier *ht_identifier_ptr;
struct GTY(()) ht_identifier {
- /* This GTY markup arranges that the null-terminated identifier would still
- stream to PCH correctly, if a null byte were to make its way into an
- identifier somehow. */
+ /* We know the 'len'gth of the 'str'ing; use it in the GTY markup. */
const unsigned char * GTY((string_length ("1 + %h.len"))) str;
unsigned int len;
unsigned int hash_value;