aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBasile Starynkevitch <basile@starynkevitch.net>2012-10-04 17:22:15 +0000
committerBasile Starynkevitch <bstarynk@gcc.gnu.org>2012-10-04 17:22:15 +0000
commit35057bf7360505c67261d0a8b3650c0fb7ae0637 (patch)
tree9ca6aed283ac36761501be69e2e70a114c305e9c /gcc
parentaf2e10ee707f0d8884e652fe8e9a9a8489fb2fa4 (diff)
downloadgcc-35057bf7360505c67261d0a8b3650c0fb7ae0637.zip
gcc-35057bf7360505c67261d0a8b3650c0fb7ae0637.tar.gz
gcc-35057bf7360505c67261d0a8b3650c0fb7ae0637.tar.bz2
Basile Starynkevitch <basile@starynkevitch.net>
* gengtype.c (walk_type): Emit mark_hook when inside a struct of a union member. From-SVN: r192092
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gengtype.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index abdd917..2a79135 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-04 Basile Starynkevitch <basile@starynkevitch.net>
+
+ * gengtype.c (walk_type): Emit mark_hook when inside a
+ struct of a union member.
+
2012-10-04 Georg-Johann Lay <avr@gjlay.de>
* config/avr/predicates.md (flash_operand): New predicate.
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 2ae4372..d872b4e 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -2810,6 +2810,7 @@ walk_type (type_p t, struct walk_type_data *d)
const char *oldval = d->val;
const char *oldprevval1 = d->prev_val[1];
const char *oldprevval2 = d->prev_val[2];
+ const char *struct_mark_hook = NULL;
const int union_p = t->kind == TYPE_UNION;
int seen_default_p = 0;
options_p o;
@@ -2833,6 +2834,13 @@ walk_type (type_p t, struct walk_type_data *d)
if (!desc && strcmp (o->name, "desc") == 0
&& o->kind == OPTION_STRING)
desc = o->info.string;
+ else if (!struct_mark_hook && strcmp (o->name, "mark_hook") == 0
+ && o->kind == OPTION_STRING)
+ struct_mark_hook = o->info.string;
+
+ if (struct_mark_hook)
+ oprintf (d->of, "%*s%s (&%s));\n",
+ d->indent, "", struct_mark_hook, oldval);
d->prev_val[2] = oldval;
d->prev_val[1] = oldprevval2;