commit ee745a15aaf58a70f4dd922e610c665d030f30a0
parent d2d85525987cfb0822d2cb0163a7323acbbadd1e
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Mon, 3 Jul 2017 10:45:46 +0100
[cc1] Add support for union designators in emit
Union is similar to struct, but in this case we only emit the last
designated element.
Diffstat:
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/cc1/code.c b/cc1/code.c
@@ -337,7 +337,7 @@ static void
emitdesig(Node *np, Type *tp)
{
Symbol *sym;
- size_t n;
+ size_t n; /* TODO: This should be SIZET */
Node *aux;
Type *p;
@@ -362,7 +362,11 @@ emitdesig(Node *np, Type *tp)
aux = (sym) ? *sym->u.init : convert(constnode(zero), tp, 0);
emitexp(OEXPR, aux);
break;
- /* TODO: case UNION: */
+ case UNION:
+ n = tp->n.elem-1;
+ aux = (sym) ? sym->u.init[n] : NULL;
+ emitdesig(aux, tp->p.fields[n]->type);
+ break;
case STRUCT:
case ARY:
for (n = 0; n < tp->n.elem; ++n) {