runtime: omit nil-channel cases from selectgo's orders

This is the gofrontend version of
Original CL description:

    Currently, selectgo does an initial pass over the cases array to look
    for entries with nil channels, so they can be easily recognized and
    skipped later on. But this still involves actually visiting the cases.

    This commit changes selectgo to omit cases with nil channels when
    constructing pollorder, so that they'll be skipped over entirely later
    on. It also checks for caseDefault up front, which will facilitate
    changing it to use a "block bool" parameter instead.

    Updates golang/go#40410

This is being brought over to gofrontend as a step toward upgrading to
Go1.16beta1, setting up for more compiler changes related to select handling.

Change-Id: I1a7a305636fb35e2a747d79dc83292888ceeac69
Trust: Ian Lance Taylor <>
Reviewed-by: Cherry Zhang <>
1 file changed