ref: b79fb78e5800e18978ed22288e8ad3bf6702cf0d
parent: 79412493b4cd9c428b6335613d9f720b79b3faf8
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Wed Jan 20 10:52:01 EST 2016
Select the correct type in emitdesig() The child type in arrays is the subtype, but in struct/unions is the type in the array of fields of the type.
--- a/cc1/code.c
+++ b/cc1/code.c
@@ -313,6 +313,7 @@
Symbol *sym;
size_t n;
Node *aux;
+ Type *p;
if (!np) {
sym = NULL;
@@ -336,7 +337,8 @@
case ARY:
for (n = 0; n < tp->n.elem; ++n) {
aux = (sym) ? sym->u.init[n] : NULL;
- emitdesig(aux, tp->type);
+ p = (tp->op == ARY) ? tp->type : tp->p.fields[n]->type;
+ emitdesig(aux, p);
}
break;
default: