commit d9b9cf2c66cd52605ddbac816cd204daf3f4a4cf Author: Roberto E. Vargas Caballero <k...@shike2.com> AuthorDate: Mon Oct 3 16:05:03 2016 +0200 Commit: Roberto E. Vargas Caballero <k...@shike2.com> CommitDate: Mon Oct 3 16:05:03 2016 +0200
[cc2-qbe] Fix lhs() and OADDR lhs was returning the source node instead of returning the destination node, and it was hidden the error because the correct type of the lhs expression is the type of the parent when we are in a OADDR expression. Without this patch pointers passed as parameters had the same type that the base type instead of having pointer type. diff --git a/cc2/arch/qbe/cgen.c b/cc2/arch/qbe/cgen.c index 425fd74..3deb1e4 100644 --- a/cc2/arch/qbe/cgen.c +++ b/cc2/arch/qbe/cgen.c @@ -326,7 +326,7 @@ lhs(Node *np, Node *new) case OMEM: case OAUTO: *new = *np; - return np; + return new; case OPTR: return rhs(np->left, new); case OFIELD: @@ -590,7 +590,9 @@ rhs(Node *np, Node *ret) case OPTR: return load(tp, rhs(l, &aux1), ret); case OADDR: - return lhs(l, ret); + lhs(l, ret); + ret->type = *tp; + return ret; case OFIELD: return field(np, ret, 0); default: