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 commit2a967f3d3a
(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 commit7f2935c734
(Subversion r9191). This amends commitf3b957ea8b
"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.
This commit is contained in:
parent
ee8ed948c1
commit
62db795a8f
2 changed files with 12 additions and 3 deletions
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue