racewalknode(&n->left, init, 0, 0);
goto ret;
- case OFOR:
- goto ret;
-
- case OIF:
- goto ret;
-
case OPROC:
racewalknode(&n->left, init, 0, 0);
goto ret;
racewalknode(&n->left, init, 0, 0);
goto ret;
- case OCALLMETH:
- goto ret;
-
- case ORETURN:
- goto ret;
-
- case OSELECT:
- goto ret;
-
case OSWITCH:
if(n->ntest->op == OTYPESW)
// TODO(dvyukov): the expression can contain calls or reads.
return;
goto ret;
- case OEMPTY:
- goto ret;
-
case ONOT:
case OMINUS:
case OPLUS:
racewalknode(&n->left, init, 0, 1);
goto ret;
+ case OEFACE:
+ racewalknode(&n->left, init, 0, 0);
+ racewalknode(&n->right, init, 0, 0);
+ goto ret;
+
// should not appear in AST by now
case OSEND:
case ORECV:
case OCASE:
case OPANIC:
case ORECOVER:
+ case OCONVIFACE:
yyerror("racewalk: %O must be lowered by now", n->op);
goto ret;
+ // just do generic traversal
+ case OFOR:
+ case OIF:
+ case OCALLMETH:
+ case ORETURN:
+ case OSELECT:
+ case OEMPTY:
+ goto ret;
+
// does not require instrumentation
case OINDEXMAP: // implemented in runtime
case OPRINT: // don't bother instrumenting it
case OCLOSURE:
case ODOTTYPE:
case ODOTTYPE2:
- case OCONVIFACE:
case OCALL:
case OBREAK:
case ODCL:
case OINDREG:
case OCOM:
case ODOTMETH:
- case OEFACE:
case OITAB:
case OEXTEND:
case OHMUL: