[PATCH v2 1/4] Ignore access-control keywords when parsing fields.
David Malcolm
dmalcolm@redhat.com
Tue Sep 24 17:57:00 GMT 2013
Classes containing access-control keywords such as "public:"
confuse struct_field_seq, leading it to call consume_until_eos
i.e. ignore text until after the next semicolon.
This leads to the first field after an access-control keyword
being ignored by gengtype. This can be seen in:
http://gcc.gnu.org/ml/gcc-patches/2013-09/msg01532.html
where the autogenerated marking function erroneously omitted the
traversal of the "callees" field of cgraph_node *.
This patch fixes up struct_field_seq to gracefully ignore such
keywords, thus fixing gengtype so that it does not erroneouly omit
fields of such a class.
* gengtype-parse.c (struct_field_seq): Ignore access-control
keywords ("public:" etc).
---
gcc/gengtype-parse.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/gcc/gengtype-parse.c b/gcc/gengtype-parse.c
index 68d372e..e5204c1 100644
--- a/gcc/gengtype-parse.c
+++ b/gcc/gengtype-parse.c
@@ -733,6 +733,17 @@ struct_field_seq (void)
{
ty = type (&opts, true);
+ /* Ignore access-control keywords ("public:" etc). */
+ while (!ty && token () == IGNORABLE_CXX_KEYWORD)
+ {
+ const char *keyword = advance ();
+ if (strcmp (keyword, "public:") != 0
+ && strcmp (keyword, "private:") != 0
+ && strcmp (keyword, "protected:") != 0)
+ break;
+ ty = type (&opts, true);
+ }
+
if (!ty || token () == ':')
{
consume_until_eos ();
--
1.7.11.7
More information about the Gcc-patches
mailing list