5c: fix int -> uvlong cast bug (thanks to qwx on his patience on a the trouble session to narrowing it down)
we used to not sign extend if the destination was unsigned uvlong, which is wrong. we have to sign extend only based on the signedness of the source (it gets propagated to vlong) this bug hit in hjfs in the newentry() function, causing file creation to fail with "create -- phase error": newentry(...) { uvlong sj; int si; ... sj = si = -1; ... }
This commit is contained in:
parent
de1e74abd2
commit
95524b1cdd
1 changed files with 1 additions and 1 deletions
|
@ -961,7 +961,7 @@ cgen64(Node *n, Node *nn)
|
|||
reg[nn->right->reg] = 0;
|
||||
cgen(l, &nod1);
|
||||
reg[nn->right->reg] = a;
|
||||
if(typeu[n->type->etype] || typeu[l->type->etype])
|
||||
if(typeu[l->type->etype])
|
||||
gmove(nodconst(0), nn->right);
|
||||
else
|
||||
gopcode(OASHR, nodconst(31), &nod1, nn->right);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue