diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2023-07-04 11:46:50 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2023-07-06 11:59:08 +0200 |
commit | ee8ed948c1f659d10f5c19e4d51bd8a79369762b (patch) | |
tree | cfa4c1d27b6b07ee5615a3f7403d9009472ceb93 /gcc/doc | |
parent | bbbe2dc1fc4f561cda3d8cb383132b7d519b0de8 (diff) | |
download | gcc-ee8ed948c1f659d10f5c19e4d51bd8a79369762b.zip gcc-ee8ed948c1f659d10f5c19e4d51bd8a79369762b.tar.gz gcc-ee8ed948c1f659d10f5c19e4d51bd8a79369762b.tar.bz2 |
GTY: Explicitly reject 'string_length' option for (fields in) global variables
This is preparational for another thing that I'm working on. No change in
behavior -- other than a more explicit error message.
The 'string_length' option currently is not supported for (fields in) global
variables. For example, if we apply the following (made-up) changes:
--- gcc/c-family/c-cppbuiltin.cc
+++ gcc/c-family/c-cppbuiltin.cc
@@ -1777 +1777 @@ struct GTY(()) lazy_hex_fp_value_struct
- const char *hex_str;
+ const char * GTY((string_length("strlen(%h.hex_str) + 1"))) hex_str;
--- gcc/varasm.cc
+++ gcc/varasm.cc
@@ -66 +66 @@ along with GCC; see the file COPYING3. If not see
-extern GTY(()) const char *first_global_object_name;
+extern GTY((string_length("strlen(%h.first_global_object_name) + 1"))) const char *first_global_object_name;
..., we get:
[...]
build/gengtype \
-S [...]/source-gcc/gcc -I gtyp-input.list -w tmp-gtype.state
/bin/sh [...]/source-gcc/gcc/../move-if-change tmp-gtype.state gtype.state
build/gengtype \
-r gtype.state
[...]/source-gcc/gcc/varasm.cc:66: global `first_global_object_name' has unknown option `string_length'
[...]/source-gcc/gcc/c-family/c-cppbuiltin.cc:1789: field `hex_str' of global `lazy_hex_fp_values[0]' has unknown option `string_length'
make[2]: *** [Makefile:2890: s-gtype] Error 1
[...]
These errors occur when writing "GC roots", where -- per my understanding --
'string_length' isn't relevant for actual GC purposes. However, like
elsewhere, it is for PCH purposes, and simply accepting 'string_length' here
isn't sufficient: we'll still get '(gt_pointer_walker) >_pch_n_S' used in the
'struct ggc_root_tab' instances, and there's no easy way to change that to
instead use 'gt_pch_n_S2' with explicit 'size_t string_len' argument. (At
least not sufficiently easy to justify spending any further time on, given that
I don't have an actual use for that feature.)
So, until an actual need arises, and/or to avoid the next person looking into
this having to figure out the same thing again, let's just document this
limitation:
[...]/source-gcc/gcc/varasm.cc:66: option `string_length' not supported for global `first_global_object_name'
[...]/source-gcc/gcc/c-family/c-cppbuiltin.cc:1789: option `string_length' not supported for field `hex_str' of global `lazy_hex_fp_values[0]'
This amends commit f3b957ea8b9dadfb1ed30f24f463529684b7a36a
"pch: Fix streaming of strings with embedded null bytes".
gcc/
* gengtype.cc (write_root, write_roots): Explicitly reject
'string_length' option.
* doc/gty.texi (GTY Options) <string_length>: Document.
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/gty.texi | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/doc/gty.texi b/gcc/doc/gty.texi index 9fc5091..7bd064b 100644 --- a/gcc/doc/gty.texi +++ b/gcc/doc/gty.texi @@ -217,6 +217,10 @@ struct GTY(()) non_terminated_string @{ @}; @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> + @findex skip @item skip |