SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
  data:i32 @offset(0)
  leftIndex:i32 @offset(4)
  rightIndex:i32 @offset(8)
}

buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

Obj = struct @align(4) {
  odd_numbers:array<f32, 10> @offset(0)
  even_numbers:array<f32, 10> @offset(40)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %tree_1:ptr<private, array<BST, 10>, read_write> = var
  %x_27:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
  $B2: {
    %8:i32 = load %data
    %x_74:i32 = let %8
    %10:ptr<function, i32, read_write> = access %tree, 0u
    store %10, %x_74
    %11:ptr<function, i32, read_write> = access %tree, 1u
    store %11, -1i
    %12:ptr<function, i32, read_write> = access %tree, 2u
    store %12, -1i
    ret
  }
}
%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void {
  $B3: {
    %baseIndex:ptr<function, i32, read_write> = var
    %param:ptr<function, BST, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, BST, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    %GLF_live8i:ptr<function, i32, read_write> = var
    %GLF_live8A:ptr<function, array<f32, 50>, read_write> = var
    store %baseIndex, 0i
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %23:i32 = load %baseIndex
        %x_75:i32 = let %23
        %25:i32 = load %treeIndex
        %x_76:i32 = let %25
        %27:bool = lte %x_75, %x_76
        if %27 [t: $B6, f: $B7] {  # if_1
          $B6: {  # true
            exit_if  # if_1
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %28:i32 = load %data_1
        %x_77:i32 = let %28
        %30:i32 = load %baseIndex
        %x_78:i32 = let %30
        %32:ptr<private, i32, read_write> = access %tree_1, %x_78, 0u
        %33:i32 = load %32
        %x_79:i32 = let %33
        %35:bool = lte %x_77, %x_79
        if %35 [t: $B8, f: $B9] {  # if_2
          $B8: {  # true
            %36:i32 = load %baseIndex
            %x_80:i32 = let %36
            %38:ptr<private, i32, read_write> = access %tree_1, %x_80, 1u
            %39:i32 = load %38
            %x_81:i32 = let %39
            %41:bool = eq %x_81, -1i
            if %41 [t: $B10, f: $B11] {  # if_3
              $B10: {  # true
                %42:i32 = load %baseIndex
                %x_82:i32 = let %42
                %44:i32 = load %treeIndex
                %x_83:i32 = let %44
                %46:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
                store %46, %x_83
                %47:i32 = load %treeIndex
                %x_84:i32 = let %47
                %49:ptr<private, BST, read_write> = access %tree_1, %x_84
                %50:BST = load %49
                %x_350:BST = let %50
                store %param, %x_350
                %52:i32 = load %data_1
                %x_85:i32 = let %52
                store %param_1, %x_85
                %54:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
                %55:BST = load %param
                %x_352:BST = let %55
                %57:ptr<private, BST, read_write> = access %tree_1, %x_84
                store %57, %x_352
                ret
              }
              $B11: {  # false
                %58:i32 = load %baseIndex
                %x_86:i32 = let %58
                %60:ptr<private, i32, read_write> = access %tree_1, %x_86, 1u
                %61:i32 = load %60
                %x_87:i32 = let %61
                store %baseIndex, %x_87
                continue  # -> $B5
              }
            }
            exit_if  # if_2
          }
          $B9: {  # false
            %63:i32 = load %baseIndex
            %x_88:i32 = let %63
            %65:ptr<private, i32, read_write> = access %tree_1, %x_88, 2u
            %66:i32 = load %65
            %x_89:i32 = let %66
            %68:bool = eq %x_89, -1i
            if %68 [t: $B12, f: $B13] {  # if_4
              $B12: {  # true
                %69:i32 = load %baseIndex
                %x_90:i32 = let %69
                %71:i32 = load %treeIndex
                %x_91:i32 = let %71
                %73:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
                store %73, %x_91
                %74:i32 = load %treeIndex
                %x_92:i32 = let %74
                %76:ptr<private, BST, read_write> = access %tree_1, %x_92
                %77:BST = load %76
                %x_362:BST = let %77
                store %param_2, %x_362
                %79:i32 = load %data_1
                %x_93:i32 = let %79
                store %param_3, %x_93
                %81:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
                %82:BST = load %param_2
                %x_364:BST = let %82
                %84:ptr<private, BST, read_write> = access %tree_1, %x_92
                store %84, %x_364
                ret
              }
              $B13: {  # false
                store %GLF_live8i, 1i
                %85:i32 = load %GLF_live8i
                %x_94:i32 = let %85
                %87:i32 = load %GLF_live8i
                %x_95:i32 = let %87
                %89:i32 = load %GLF_live8i
                %x_96:i32 = let %89
                %91:bool = gte %x_94, 0i
                %92:bool = lt %x_95, 50i
                %93:bool = and %91, %92
                %94:i32 = select 0i, %x_96, %93
                %x_369:i32 = let %94
                %96:ptr<function, f32, read_write> = access %GLF_live8A, 0i
                %97:f32 = load %96
                %x_371:f32 = let %97
                %99:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
                %100:f32 = load %99
                %x_373:f32 = let %100
                %102:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
                %103:f32 = add %x_373, %x_371
                store %102, %103
                loop [b: $B14, c: $B15] {  # loop_2
                  $B14: {  # body
                    %104:i32 = load %baseIndex
                    %x_97:i32 = let %104
                    %106:ptr<private, i32, read_write> = access %tree_1, %x_97, 2u
                    %107:i32 = load %106
                    %x_98:i32 = let %107
                    store %baseIndex, %x_98
                    continue  # -> $B15
                  }
                  $B15: {  # continuing
                    %109:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
                    %110:f32 = load_vector_element %109, 0u
                    %x_382:f32 = let %110
                    %112:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
                    %113:f32 = load_vector_element %112, 1u
                    %x_384:f32 = let %113
                    %115:bool = gt %x_382, %x_384
                    %116:bool = eq %115, false
                    break_if %116  # -> [t: exit_loop loop_2, f: $B14]
                  }
                }
                continue  # -> $B5
              }
            }
            exit_if  # if_2
          }
        }
        unreachable
      }
      $B5: {  # continuing
        next_iteration  # -> $B4
      }
    }
    ret
  }
}
%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
  $B16: {
    %index:ptr<function, i32, read_write> = var
    %currentNode:ptr<function, BST, read_write> = var
    %x_387:ptr<function, i32, read_write> = var
    store %index, 0i
    loop [b: $B17, c: $B18] {  # loop_3
      $B17: {  # body
        %122:i32 = load %index
        %x_99:i32 = let %122
        %124:bool = neq %x_99, -1i
        if %124 [t: $B19, f: $B20] {  # if_5
          $B19: {  # true
            exit_if  # if_5
          }
          $B20: {  # false
            exit_loop  # loop_3
          }
        }
        %125:i32 = load %index
        %x_100:i32 = let %125
        %127:ptr<private, BST, read_write> = access %tree_1, %x_100
        %128:BST = load %127
        %x_395:BST = let %128
        store %currentNode, %x_395
        %130:ptr<function, i32, read_write> = access %currentNode, 0u
        %131:i32 = load %130
        %x_101:i32 = let %131
        %133:i32 = load %t
        %x_102:i32 = let %133
        %135:bool = eq %x_101, %x_102
        if %135 [t: $B21] {  # if_6
          $B21: {  # true
            %136:i32 = load %t
            %x_103:i32 = let %136
            ret %x_103
          }
        }
        %138:i32 = load %t
        %x_104:i32 = let %138
        %140:ptr<function, i32, read_write> = access %currentNode, 0u
        %141:i32 = load %140
        %x_105:i32 = let %141
        %143:bool = gt %x_104, %x_105
        if %143 [t: $B22, f: $B23] {  # if_7
          $B22: {  # true
            %144:ptr<function, i32, read_write> = access %currentNode, 2u
            %145:i32 = load %144
            %x_106:i32 = let %145
            store %x_387, %x_106
            exit_if  # if_7
          }
          $B23: {  # false
            %147:ptr<function, i32, read_write> = access %currentNode, 1u
            %148:i32 = load %147
            %x_107:i32 = let %148
            store %x_387, %x_107
            exit_if  # if_7
          }
        }
        %150:i32 = load %x_387
        %x_108:i32 = let %150
        store %index, %x_108
        continue  # -> $B18
      }
      $B18: {  # continuing
        next_iteration  # -> $B17
      }
    }
    ret -1i
  }
}
%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 {
  $B24: {
    %param_5:ptr<function, i32, read_write> = var
    %param_6:ptr<function, i32, read_write> = var
    %param_7:ptr<function, i32, read_write> = var
    %157:f32 = load %v
    %x_418:f32 = let %157
    %159:f32 = mul %x_418, 6.5f
    store %v, %159
    %160:f32 = load %v
    %x_420:f32 = let %160
    %162:bool = lt %x_420, 1.5f
    if %162 [t: $B25] {  # if_8
      $B25: {  # true
        store %param_5, 100i
        %163:i32 = call %search_i1_, %param_5
        %x_110:i32 = let %163
        %165:f32 = convert %x_110
        ret %165
      }
    }
    %166:f32 = load %v
    %x_425:f32 = let %166
    %168:bool = lt %x_425, 4.0f
    if %168 [t: $B26] {  # if_9
      $B26: {  # true
        ret 0.0f
      }
    }
    %169:f32 = load %v
    %x_429:f32 = let %169
    store %param_6, 6i
    %171:i32 = call %search_i1_, %param_6
    %x_111:i32 = let %171
    %173:f32 = convert %x_111
    %174:bool = lt %x_429, %173
    if %174 [t: $B27] {  # if_10
      $B27: {  # true
        ret 1.0f
      }
    }
    store %param_7, 30i
    %175:i32 = call %search_i1_, %param_7
    %x_112:i32 = let %175
    %177:f32 = convert %x_112
    %178:f32 = add 10.0f, %177
    ret %178
  }
}
%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> {
  $B28: {
    %nodeData:ptr<function, f32, read_write> = var
    %param_4:ptr<function, i32, read_write> = var
    store %param_4, 15i
    %183:i32 = call %search_i1_, %param_4
    %x_109:i32 = let %183
    %185:f32 = convert %x_109
    store %nodeData, %185
    %186:f32 = load %angle
    %x_409:f32 = let %186
    %188:f32 = load %nodeData
    %x_410:f32 = let %188
    %190:vec3<f32> = construct 1.0f, 5.0f, %x_410
    %191:vec3<f32> = mul %190, %x_409
    %192:vec3<f32> = add vec3<f32>(30.0f), %191
    %193:vec3<f32> = div %192, vec3<f32>(50.0f)
    ret %193
  }
}
%main_1 = func():void {
  $B29: {
    %treeIndex_1:ptr<function, i32, read_write> = var
    %param_8:ptr<function, BST, read_write> = var
    %param_9:ptr<function, i32, read_write> = var
    %param_10:ptr<function, i32, read_write> = var
    %param_11:ptr<function, i32, read_write> = var
    %GLF_live1_looplimiter2:ptr<function, i32, read_write> = var
    %GLF_live1i:ptr<function, i32, read_write> = var
    %param_12:ptr<function, i32, read_write> = var
    %param_13:ptr<function, i32, read_write> = var
    %param_14:ptr<function, i32, read_write> = var
    %param_15:ptr<function, i32, read_write> = var
    %param_16:ptr<function, i32, read_write> = var
    %param_17:ptr<function, i32, read_write> = var
    %param_18:ptr<function, i32, read_write> = var
    %param_19:ptr<function, i32, read_write> = var
    %param_20:ptr<function, i32, read_write> = var
    %param_21:ptr<function, i32, read_write> = var
    %param_22:ptr<function, i32, read_write> = var
    %param_23:ptr<function, i32, read_write> = var
    %GLF_live4_looplimiter3:ptr<function, i32, read_write> = var
    %GLF_live4i:ptr<function, i32, read_write> = var
    %GLF_live4index:ptr<function, i32, read_write> = var
    %GLF_live4obj:ptr<function, Obj, read_write> = var
    %param_24:ptr<function, i32, read_write> = var
    %param_25:ptr<function, i32, read_write> = var
    %param_26:ptr<function, i32, read_write> = var
    %param_27:ptr<function, i32, read_write> = var
    %z:ptr<function, vec2<f32>, read_write> = var
    %x:ptr<function, f32, read_write> = var
    %param_28:ptr<function, f32, read_write> = var
    %y:ptr<function, f32, read_write> = var
    %param_29:ptr<function, f32, read_write> = var
    %sum:ptr<function, i32, read_write> = var
    %t_1:ptr<function, i32, read_write> = var
    %result:ptr<function, i32, read_write> = var
    %param_30:ptr<function, i32, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %x_235:ptr<function, vec3<f32>, read_write> = var
    %param_31:ptr<function, f32, read_write> = var
    store %treeIndex_1, 0i
    %234:ptr<private, BST, read_write> = access %tree_1, 0i
    %235:BST = load %234
    %x_237:BST = let %235
    store %param_8, %x_237
    store %param_9, 9i
    %237:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
    %238:BST = load %param_8
    %x_239:BST = let %238
    %240:ptr<private, BST, read_write> = access %tree_1, 0i
    store %240, %x_239
    %241:i32 = load %treeIndex_1
    %x_113:i32 = let %241
    %243:i32 = add %x_113, 1i
    store %treeIndex_1, %243
    %244:i32 = load %treeIndex_1
    %x_115:i32 = let %244
    store %param_10, %x_115
    store %param_11, 5i
    %246:void = call %insert_i1_i1_, %param_10, %param_11
    %247:i32 = load %treeIndex_1
    %x_116:i32 = let %247
    %249:i32 = add %x_116, 1i
    store %treeIndex_1, %249
    store %GLF_live1_looplimiter2, 0i
    store %GLF_live1i, 0i
    loop [b: $B30, c: $B31] {  # loop_4
      $B30: {  # body
        if true [t: $B32, f: $B33] {  # if_11
          $B32: {  # true
            exit_if  # if_11
          }
          $B33: {  # false
            exit_loop  # loop_4
          }
        }
        %250:i32 = load %GLF_live1_looplimiter2
        %x_118:i32 = let %250
        %252:bool = gte %x_118, 7i
        if %252 [t: $B34] {  # if_12
          $B34: {  # true
            exit_loop  # loop_4
          }
        }
        %253:i32 = load %GLF_live1_looplimiter2
        %x_119:i32 = let %253
        %255:i32 = add %x_119, 1i
        store %GLF_live1_looplimiter2, %255
        continue  # -> $B31
      }
      $B31: {  # continuing
        %256:i32 = load %GLF_live1i
        %x_121:i32 = let %256
        %258:i32 = add %x_121, 1i
        store %GLF_live1i, %258
        next_iteration  # -> $B30
      }
    }
    %259:i32 = load %treeIndex_1
    %x_123:i32 = let %259
    store %param_12, %x_123
    store %param_13, 12i
    %261:void = call %insert_i1_i1_, %param_12, %param_13
    %262:i32 = load %treeIndex_1
    %x_124:i32 = let %262
    %264:i32 = add %x_124, 1i
    store %treeIndex_1, %264
    %265:i32 = load %treeIndex_1
    %x_126:i32 = let %265
    store %param_14, %x_126
    store %param_15, 15i
    %267:void = call %insert_i1_i1_, %param_14, %param_15
    %268:i32 = load %treeIndex_1
    %x_127:i32 = let %268
    %270:i32 = add %x_127, 1i
    store %treeIndex_1, %270
    %271:i32 = load %treeIndex_1
    %x_129:i32 = let %271
    store %param_16, %x_129
    store %param_17, 7i
    %273:void = call %insert_i1_i1_, %param_16, %param_17
    %274:i32 = load %treeIndex_1
    %x_130:i32 = let %274
    %276:i32 = add %x_130, 1i
    store %treeIndex_1, %276
    %277:i32 = load %treeIndex_1
    %x_132:i32 = let %277
    store %param_18, %x_132
    store %param_19, 8i
    %279:void = call %insert_i1_i1_, %param_18, %param_19
    %280:i32 = load %treeIndex_1
    %x_133:i32 = let %280
    %282:i32 = add %x_133, 1i
    store %treeIndex_1, %282
    %283:i32 = load %treeIndex_1
    %x_135:i32 = let %283
    store %param_20, %x_135
    store %param_21, 2i
    %285:void = call %insert_i1_i1_, %param_20, %param_21
    %286:i32 = load %treeIndex_1
    %x_136:i32 = let %286
    %288:i32 = add %x_136, 1i
    store %treeIndex_1, %288
    %289:i32 = load %treeIndex_1
    %x_138:i32 = let %289
    store %param_22, %x_138
    store %param_23, 6i
    %291:void = call %insert_i1_i1_, %param_22, %param_23
    %292:i32 = load %treeIndex_1
    %x_139:i32 = let %292
    %294:i32 = add %x_139, 1i
    store %treeIndex_1, %294
    store %GLF_live4_looplimiter3, 0i
    store %GLF_live4i, 0i
    loop [b: $B35, c: $B36] {  # loop_5
      $B35: {  # body
        if true [t: $B37, f: $B38] {  # if_13
          $B37: {  # true
            exit_if  # if_13
          }
          $B38: {  # false
            exit_loop  # loop_5
          }
        }
        %295:i32 = load %GLF_live4_looplimiter3
        %x_141:i32 = let %295
        %297:bool = gte %x_141, 3i
        if %297 [t: $B39] {  # if_14
          $B39: {  # true
            exit_loop  # loop_5
          }
        }
        %298:i32 = load %GLF_live4_looplimiter3
        %x_142:i32 = let %298
        %300:i32 = add %x_142, 1i
        store %GLF_live4_looplimiter3, %300
        store %GLF_live4index, 1i
        %301:i32 = load %GLF_live4index
        %x_144:i32 = let %301
        %303:i32 = load %GLF_live4index
        %x_145:i32 = let %303
        %305:i32 = load %GLF_live4index
        %x_146:i32 = let %305
        %307:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
        %308:f32 = load %307
        %x_269:f32 = let %308
        %310:bool = gte %x_144, 0i
        %311:bool = lt %x_145, 10i
        %312:bool = and %310, %311
        %313:i32 = select 0i, %x_146, %312
        %314:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %313
        store %314, %x_269
        %315:i32 = load %GLF_live4i
        %x_147:i32 = let %315
        %317:i32 = load %GLF_live4i
        %x_148:i32 = let %317
        %319:i32 = load %GLF_live4i
        %x_149:i32 = let %319
        %321:bool = gte %x_147, 0i
        %322:bool = lt %x_148, 10i
        %323:bool = and %321, %322
        %324:i32 = select 0i, %x_149, %323
        %325:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %324
        store %325, 1.0f
        continue  # -> $B36
      }
      $B36: {  # continuing
        %326:i32 = load %GLF_live4i
        %x_150:i32 = let %326
        %328:i32 = add %x_150, 1i
        store %GLF_live4i, %328
        next_iteration  # -> $B35
      }
    }
    %329:i32 = load %treeIndex_1
    %x_152:i32 = let %329
    store %param_24, %x_152
    store %param_25, 17i
    %331:void = call %insert_i1_i1_, %param_24, %param_25
    %332:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
    %333:f32 = load_vector_element %332, 0u
    %x_278:f32 = let %333
    %335:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
    %336:f32 = load_vector_element %335, 1u
    %x_280:f32 = let %336
    %338:bool = gt %x_278, %x_280
    if %338 [t: $B40] {  # if_15
      $B40: {  # true
        ret
      }
    }
    %339:i32 = load %treeIndex_1
    %x_153:i32 = let %339
    %341:i32 = add %x_153, 1i
    store %treeIndex_1, %341
    %342:i32 = load %treeIndex_1
    %x_155:i32 = let %342
    store %param_26, %x_155
    store %param_27, 13i
    %344:void = call %insert_i1_i1_, %param_26, %param_27
    %345:vec4<f32> = load %gl_FragCoord
    %x_285:vec4<f32> = let %345
    %347:f32 = access %x_285, 1u
    %348:f32 = access %x_285, 0u
    %349:vec2<f32> = construct %347, %348
    %350:vec2<f32> = div %349, vec2<f32>(256.0f)
    store %z, %350
    %351:f32 = load_vector_element %z, 0u
    %x_289:f32 = let %351
    store %param_28, %x_289
    %353:f32 = call %makeFrame_f1_, %param_28
    %x_290:f32 = let %353
    store %x, %x_290
    %355:f32 = load_vector_element %z, 1u
    %x_292:f32 = let %355
    store %param_29, %x_292
    %357:f32 = call %makeFrame_f1_, %param_29
    %x_293:f32 = let %357
    store %y, %x_293
    store %sum, -100i
    store %t_1, 0i
    loop [b: $B41, c: $B42] {  # loop_6
      $B41: {  # body
        %359:i32 = load %t_1
        %x_156:i32 = let %359
        %361:bool = lt %x_156, 20i
        if %361 [t: $B43, f: $B44] {  # if_16
          $B43: {  # true
            exit_if  # if_16
          }
          $B44: {  # false
            exit_loop  # loop_6
          }
        }
        %362:i32 = load %t_1
        %x_157:i32 = let %362
        store %param_30, %x_157
        %364:i32 = call %search_i1_, %param_30
        %x_158:i32 = let %364
        store %result, %x_158
        %366:i32 = load %result
        %x_159:i32 = let %366
        %368:bool = gt %x_159, 0i
        if %368 [t: $B45, f: $B46] {  # if_17
          $B45: {  # true
            exit_if  # if_17
          }
          $B46: {  # false
            %369:i32 = load %result
            %x_160:i32 = let %369
            switch %x_160 [c: (0i, $B47), c: (-1i, $B48), c: (default, $B49)] {  # switch_1
              $B47: {  # case
                ret
              }
              $B48: {  # case
                %371:i32 = load %sum
                %x_161:i32 = let %371
                %373:i32 = add %x_161, 1i
                store %sum, %373
                exit_switch  # switch_1
              }
              $B49: {  # case
                exit_switch  # switch_1
              }
            }
            exit_if  # if_17
          }
        }
        continue  # -> $B42
      }
      $B42: {  # continuing
        %374:i32 = load %t_1
        %x_163:i32 = let %374
        %376:i32 = add %x_163, 1i
        store %t_1, %376
        next_iteration  # -> $B41
      }
    }
    %377:f32 = load %x
    %x_307:f32 = let %377
    %379:f32 = load %y
    %x_308:f32 = let %379
    %381:i32 = load %sum
    %x_165:i32 = let %381
    %383:f32 = convert %x_165
    %384:f32 = mul %x_308, %383
    %385:f32 = add %x_307, %384
    store %a, %385
    %386:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
    %387:f32 = load_vector_element %386, 0u
    %x_313:f32 = let %387
    %389:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
    %390:f32 = load_vector_element %389, 1u
    %x_315:f32 = let %390
    %392:bool = lt %x_313, %x_315
    if %392 [t: $B50, f: $B51] {  # if_18
      $B50: {  # true
        store %x_235, vec3<f32>(1.0f, 0.0f, 0.0f)
        exit_if  # if_18
      }
      $B51: {  # false
        %393:f32 = load %a
        %x_320:f32 = let %393
        store %param_31, %x_320
        %395:vec3<f32> = call %hueColor_f1_, %param_31
        %x_321:vec3<f32> = let %395
        store %x_235, %x_321
        exit_if  # if_18
      }
    }
    %397:vec3<f32> = load %x_235
    %x_322:vec3<f32> = let %397
    %399:f32 = access %x_322, 0u
    %400:f32 = access %x_322, 1u
    %401:f32 = access %x_322, 2u
    %402:vec4<f32> = construct %399, %400, %401, 1.0f
    store %x_GLF_color, %402
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B52: {
    store %gl_FragCoord, %gl_FragCoord_param
    %405:void = call %main_1
    %406:vec4<f32> = load %x_GLF_color
    %407:main_out = construct %406
    ret %407
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
