From 35057bf7360505c67261d0a8b3650c0fb7ae0637 Mon Sep 17 00:00:00 2001 From: Basile Starynkevitch Date: Thu, 4 Oct 2012 17:22:15 +0000 Subject: [PATCH] Basile Starynkevitch * gengtype.c (walk_type): Emit mark_hook when inside a struct of a union member. From-SVN: r192092 --- gcc/ChangeLog | 5 +++++ gcc/gengtype.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abdd9172131..2a7913557ef 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-10-04 Basile Starynkevitch + + * gengtype.c (walk_type): Emit mark_hook when inside a + struct of a union member. + 2012-10-04 Georg-Johann Lay * config/avr/predicates.md (flash_operand): New predicate. diff --git a/gcc/gengtype.c b/gcc/gengtype.c index 2ae43726b59..d872b4ea78a 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;