fix ccom idempotency
ccom may be called multiple times on the same node, via 'goto loop' calls from the commute label, OADD, and a few other places. Casts to void could null out the LHS of the node, which would cause the compiler to crash if the cast was revisited due to one of these cases, because we tried frobbing n->left. Now, if n->left is nil, we just return.w
This commit is contained in:
parent
5bc9b0c3ca
commit
52dc943702
1 changed files with 4 additions and 1 deletions
|
@ -1018,6 +1018,8 @@ if(debug['y']) prtree(n, "final");
|
|||
* remove some zero operands
|
||||
* remove no op casts
|
||||
* evaluate constants
|
||||
* Note: ccom may be called on the same node
|
||||
* multiple times.
|
||||
*/
|
||||
void
|
||||
ccom(Node *n)
|
||||
|
@ -1078,8 +1080,9 @@ loop:
|
|||
if(n->type == types[TVOID] && !side(l)){
|
||||
n->left = Z;
|
||||
n->type = T;
|
||||
break;
|
||||
}
|
||||
if(n->left == Z)
|
||||
break;
|
||||
if(castucom(n))
|
||||
warn(n, "32-bit unsigned complement zero-extended to 64 bits");
|
||||
ccom(l);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue