summaryrefslogtreecommitdiff
path: root/parse/infer.c
diff options
context:
space:
mode:
Diffstat (limited to 'parse/infer.c')
-rw-r--r--parse/infer.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/parse/infer.c b/parse/infer.c
index c5cad2f..8da7e02 100644
--- a/parse/infer.c
+++ b/parse/infer.c
@@ -514,7 +514,7 @@ tyresolve(Type *t)
case Tyunion:
inaggr++;
for (i = 0; i < t->nmemb; i++) {
- t->udecls[i]->utype = t;
+ assert(t->udecls[i]->utype);
t->udecls[i]->utype = tf(t->udecls[i]->utype);
if (t->udecls[i]->etype) {
tyresolve(t->udecls[i]->etype);
@@ -1498,7 +1498,11 @@ inferucon(Node *n, int *isconst)
*
* To make it compile, for now, we just bind the types in here.
*/
- t = tysubst(tf(uc->utype), uc->utype);
+ t = uc->utype;
+ if (t->type != Tyunion)
+ t = t->sub[0];
+ assert(t->type == Tyunion);
+ t = tysubst(tf(t), t);
uc = tybase(t)->udecls[uc->id];
if (uc->etype) {
inferexpr(&n->expr.args[1], NULL, NULL);