SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

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

$B1: {  # root
  %data:ptr<private, array<i32, 10>, read_write> = var
  %temp:ptr<private, array<i32, 10>, read_write> = var
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_34:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
  $B2: {
    %k:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %15:i32 = load %f
    %x_260:i32 = let %15
    store %k, %x_260
    %17:i32 = load %f
    %x_261:i32 = let %17
    store %i, %x_261
    %19:i32 = load %mid
    %x_262:i32 = let %19
    %21:i32 = add %x_262, 1i
    store %j, %21
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %22:i32 = load %i
        %x_268:i32 = let %22
        %24:i32 = load %mid
        %x_269:i32 = let %24
        %26:i32 = load %j
        %x_271:i32 = let %26
        %28:i32 = load %to
        %x_272:i32 = let %28
        %30:bool = lte %x_268, %x_269
        %31:bool = lte %x_271, %x_272
        %32:bool = and %30, %31
        if %32 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %33:i32 = load %i
        %x_276:i32 = let %33
        %35:ptr<private, i32, read_write> = access %data, %x_276
        %36:i32 = load %35
        %x_278:i32 = let %36
        %38:i32 = load %j
        %x_279:i32 = let %38
        %40:ptr<private, i32, read_write> = access %data, %x_279
        %41:i32 = load %40
        %x_281:i32 = let %41
        %43:bool = lt %x_278, %x_281
        if %43 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %44:i32 = load %k
            %x_286:i32 = let %44
            %46:i32 = add %x_286, 1i
            store %k, %46
            %47:i32 = load %i
            %x_288:i32 = let %47
            %49:i32 = add %x_288, 1i
            store %i, %49
            %50:ptr<private, i32, read_write> = access %data, %x_288
            %51:i32 = load %50
            %x_291:i32 = let %51
            %53:ptr<private, i32, read_write> = access %temp, %x_286
            store %53, %x_291
            exit_if  # if_2
          }
          $B8: {  # false
            %54:i32 = load %k
            %x_293:i32 = let %54
            %56:i32 = add %x_293, 1i
            store %k, %56
            %57:i32 = load %j
            %x_295:i32 = let %57
            %59:i32 = add %x_295, 1i
            store %j, %59
            %60:ptr<private, i32, read_write> = access %data, %x_295
            %61:i32 = load %60
            %x_298:i32 = let %61
            %63:ptr<private, i32, read_write> = access %temp, %x_293
            store %63, %x_298
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %64:i32 = load %i
        %x_304:i32 = let %64
        %66:i32 = load %i
        %x_306:i32 = let %66
        %68:i32 = load %mid
        %x_307:i32 = let %68
        %70:bool = lt %x_304, 10i
        %71:bool = lte %x_306, %x_307
        %72:bool = and %70, %71
        if %72 [t: $B11, f: $B12] {  # if_3
          $B11: {  # true
            exit_if  # if_3
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        %73:i32 = load %k
        %x_311:i32 = let %73
        %75:i32 = add %x_311, 1i
        store %k, %75
        %76:i32 = load %i
        %x_313:i32 = let %76
        %78:i32 = add %x_313, 1i
        store %i, %78
        %79:ptr<private, i32, read_write> = access %data, %x_313
        %80:i32 = load %79
        %x_316:i32 = let %80
        %82:ptr<private, i32, read_write> = access %temp, %x_311
        store %82, %x_316
        continue  # -> $B10
      }
      $B10: {  # continuing
        next_iteration  # -> $B9
      }
    }
    %83:i32 = load %f
    %x_318:i32 = let %83
    store %i_1, %x_318
    loop [b: $B13, c: $B14] {  # loop_3
      $B13: {  # body
        %85:i32 = load %i_1
        %x_323:i32 = let %85
        %87:i32 = load %to
        %x_324:i32 = let %87
        %89:bool = lte %x_323, %x_324
        if %89 [t: $B15, f: $B16] {  # if_4
          $B15: {  # true
            exit_if  # if_4
          }
          $B16: {  # false
            exit_loop  # loop_3
          }
        }
        %90:i32 = load %i_1
        %x_327:i32 = let %90
        %92:i32 = load %i_1
        %x_328:i32 = let %92
        %94:ptr<private, i32, read_write> = access %temp, %x_328
        %95:i32 = load %94
        %x_330:i32 = let %95
        %97:ptr<private, i32, read_write> = access %data, %x_327
        store %97, %x_330
        continue  # -> $B14
      }
      $B14: {  # continuing
        %98:i32 = load %i_1
        %x_332:i32 = let %98
        %100:i32 = add %x_332, 1i
        store %i_1, %100
        next_iteration  # -> $B13
      }
    }
    ret
  }
}
%func_i1_i1_ = func(%m:ptr<function, i32, read_write>, %high:ptr<function, i32, read_write>):i32 {
  $B17: {
    %x:ptr<function, i32, read_write> = var
    %x_335:ptr<function, i32, read_write> = var
    %x_336:ptr<function, i32, read_write> = var
    %107:f32 = load_vector_element %gl_FragCoord, 0u
    %x_338:f32 = let %107
    %109:bool = gte %x_338, 0.0f
    if %109 [t: $B18, f: $B19] {  # if_5
      $B18: {  # true
        if false [t: $B20, f: $B21] {  # if_6
          $B20: {  # true
            %110:i32 = load %high
            %x_346:i32 = let %110
            %112:u32 = and 0u, 31u
            %113:i32 = shl %x_346, %112
            store %x_336, %113
            exit_if  # if_6
          }
          $B21: {  # false
            store %x_336, 4i
            exit_if  # if_6
          }
        }
        %114:i32 = load %x_336
        %x_348:i32 = let %114
        %116:u32 = bitcast %x_348
        %117:u32 = and %116, 31u
        %118:i32 = shl 1i, %117
        store %x_335, %118
        exit_if  # if_5
      }
      $B19: {  # false
        store %x_335, 1i
        exit_if  # if_5
      }
    }
    %119:i32 = load %x_335
    %x_350:i32 = let %119
    store %x, %x_350
    %121:i32 = load %x
    %x_351:i32 = let %121
    %123:u32 = and 4u, 31u
    %124:i32 = shr %x_351, %123
    store %x, %124
    %125:i32 = load %m
    %x_353:i32 = let %125
    %127:i32 = load %m
    %x_355:i32 = let %127
    %129:i32 = load %m
    %x_357:i32 = let %129
    %131:i32 = load %x
    %x_359:i32 = let %131
    %133:i32 = mul 2i, %x_353
    %134:i32 = mul 2i, %x_355
    %135:i32 = mul 2i, %x_357
    %136:i32 = call %tint_div_i32, %135, %x_359
    %138:i32 = let %136
    %139:i32 = max %133, %134
    %140:i32 = min %139, %138
    ret %140
  }
}
%mergeSort_ = func():void {
  $B22: {
    %low:ptr<function, i32, read_write> = var
    %high_1:ptr<function, i32, read_write> = var
    %m_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %f_1:ptr<function, i32, read_write> = var
    %mid_1:ptr<function, i32, read_write> = var
    %to_1:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, i32, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    %param_4:ptr<function, i32, read_write> = var
    store %low, 0i
    store %high_1, 9i
    store %m_1, 1i
    loop [b: $B23, c: $B24] {  # loop_4
      $B23: {  # body
        %154:i32 = load %m_1
        %x_367:i32 = let %154
        %156:i32 = load %high_1
        %x_368:i32 = let %156
        %158:bool = lte %x_367, %x_368
        if %158 [t: $B25, f: $B26] {  # if_7
          $B25: {  # true
            exit_if  # if_7
          }
          $B26: {  # false
            exit_loop  # loop_4
          }
        }
        %159:i32 = load %low
        %x_371:i32 = let %159
        store %i_2, %x_371
        loop [b: $B27, c: $B28] {  # loop_5
          $B27: {  # body
            %161:i32 = load %i_2
            %x_376:i32 = let %161
            %163:i32 = load %high_1
            %x_377:i32 = let %163
            %165:bool = lt %x_376, %x_377
            if %165 [t: $B29, f: $B30] {  # if_8
              $B29: {  # true
                exit_if  # if_8
              }
              $B30: {  # false
                exit_loop  # loop_5
              }
            }
            %166:i32 = load %i_2
            %x_380:i32 = let %166
            store %f_1, %x_380
            %168:i32 = load %i_2
            %x_381:i32 = let %168
            %170:i32 = load %m_1
            %x_382:i32 = let %170
            %172:i32 = add %x_381, %x_382
            %173:i32 = sub %172, 1i
            store %mid_1, %173
            %174:i32 = load %i_2
            %x_385:i32 = let %174
            %176:i32 = load %m_1
            %x_386:i32 = let %176
            %178:i32 = load %high_1
            %x_390:i32 = let %178
            %180:i32 = mul 2i, %x_386
            %181:i32 = add %x_385, %180
            %182:i32 = sub %181, 1i
            %183:i32 = min %182, %x_390
            store %to_1, %183
            %184:i32 = load %f_1
            %x_392:i32 = let %184
            store %param, %x_392
            %186:i32 = load %mid_1
            %x_393:i32 = let %186
            store %param_1, %x_393
            %188:i32 = load %to_1
            %x_394:i32 = let %188
            store %param_2, %x_394
            %190:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
            continue  # -> $B28
          }
          $B28: {  # continuing
            %191:i32 = load %m_1
            %x_396:i32 = let %191
            store %param_3, %x_396
            %193:i32 = load %high_1
            %x_397:i32 = let %193
            store %param_4, %x_397
            %195:i32 = call %func_i1_i1_, %param_3, %param_4
            %x_398:i32 = let %195
            %197:i32 = load %i_2
            %x_399:i32 = let %197
            %199:i32 = add %x_399, %x_398
            store %i_2, %199
            next_iteration  # -> $B27
          }
        }
        continue  # -> $B24
      }
      $B24: {  # continuing
        %200:i32 = load %m_1
        %x_401:i32 = let %200
        %202:i32 = mul 2i, %x_401
        store %m_1, %202
        next_iteration  # -> $B23
      }
    }
    ret
  }
}
%main_1 = func():void {
  $B31: {
    %i_3:ptr<function, i32, read_write> = var
    %j_1:ptr<function, i32, read_write> = var
    %grey:ptr<function, f32, read_write> = var
    %207:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
    %208:f32 = load_vector_element %207, 0u
    %x_93:f32 = let %208
    %210:i32 = call %tint_f32_to_i32, %x_93
    store %i_3, %210
    loop [b: $B32, c: $B33] {  # loop_6
      $B32: {  # body
        %212:i32 = load %i_3
        %x_99:i32 = let %212
        switch %x_99 [c: (9i, $B34), c: (8i, $B35), c: (7i, $B36), c: (6i, $B37), c: (5i, $B38), c: (4i, $B39), c: (3i, $B40), c: (2i, $B41), c: (1i, $B42), c: (0i, $B43), c: (default, $B44)] {  # switch_1
          $B34: {  # case
            %214:i32 = load %i_3
            %x_129:i32 = let %214
            %216:ptr<private, i32, read_write> = access %data, %x_129
            store %216, -5i
            exit_switch  # switch_1
          }
          $B35: {  # case
            %217:i32 = load %i_3
            %x_127:i32 = let %217
            %219:ptr<private, i32, read_write> = access %data, %x_127
            store %219, -4i
            exit_switch  # switch_1
          }
          $B36: {  # case
            %220:i32 = load %i_3
            %x_125:i32 = let %220
            %222:ptr<private, i32, read_write> = access %data, %x_125
            store %222, -3i
            exit_switch  # switch_1
          }
          $B37: {  # case
            %223:i32 = load %i_3
            %x_123:i32 = let %223
            %225:ptr<private, i32, read_write> = access %data, %x_123
            store %225, -2i
            exit_switch  # switch_1
          }
          $B38: {  # case
            %226:i32 = load %i_3
            %x_121:i32 = let %226
            %228:ptr<private, i32, read_write> = access %data, %x_121
            store %228, -1i
            exit_switch  # switch_1
          }
          $B39: {  # case
            %229:i32 = load %i_3
            %x_119:i32 = let %229
            %231:ptr<private, i32, read_write> = access %data, %x_119
            store %231, 0i
            exit_switch  # switch_1
          }
          $B40: {  # case
            %232:i32 = load %i_3
            %x_117:i32 = let %232
            %234:ptr<private, i32, read_write> = access %data, %x_117
            store %234, 1i
            exit_switch  # switch_1
          }
          $B41: {  # case
            %235:i32 = load %i_3
            %x_115:i32 = let %235
            %237:ptr<private, i32, read_write> = access %data, %x_115
            store %237, 2i
            exit_switch  # switch_1
          }
          $B42: {  # case
            %238:i32 = load %i_3
            %x_113:i32 = let %238
            %240:ptr<private, i32, read_write> = access %data, %x_113
            store %240, 3i
            exit_switch  # switch_1
          }
          $B43: {  # case
            %241:i32 = load %i_3
            %x_111:i32 = let %241
            %243:ptr<private, i32, read_write> = access %data, %x_111
            store %243, 4i
            exit_switch  # switch_1
          }
          $B44: {  # case
            exit_switch  # switch_1
          }
        }
        %244:i32 = load %i_3
        %x_131:i32 = let %244
        %246:i32 = add %x_131, 1i
        store %i_3, %246
        continue  # -> $B33
      }
      $B33: {  # continuing
        %247:i32 = load %i_3
        %x_133:i32 = let %247
        %249:bool = lt %x_133, 10i
        %250:bool = eq %249, false
        break_if %250  # -> [t: exit_loop loop_6, f: $B32]
      }
    }
    store %j_1, 0i
    loop [b: $B45, c: $B46] {  # loop_7
      $B45: {  # body
        %251:i32 = load %j_1
        %x_139:i32 = let %251
        %253:bool = lt %x_139, 10i
        if %253 [t: $B47, f: $B48] {  # if_9
          $B47: {  # true
            exit_if  # if_9
          }
          $B48: {  # false
            exit_loop  # loop_7
          }
        }
        %254:i32 = load %j_1
        %x_142:i32 = let %254
        %256:i32 = load %j_1
        %x_143:i32 = let %256
        %258:ptr<private, i32, read_write> = access %data, %x_143
        %259:i32 = load %258
        %x_145:i32 = let %259
        %261:ptr<private, i32, read_write> = access %temp, %x_142
        store %261, %x_145
        continue  # -> $B46
      }
      $B46: {  # continuing
        %262:i32 = load %j_1
        %x_147:i32 = let %262
        %264:i32 = add %x_147, 1i
        store %j_1, %264
        next_iteration  # -> $B45
      }
    }
    %265:void = call %mergeSort_
    %266:f32 = load_vector_element %gl_FragCoord, 1u
    %x_151:f32 = let %266
    %268:i32 = call %tint_f32_to_i32, %x_151
    %269:bool = lt %268, 30i
    if %269 [t: $B49, f: $B50] {  # if_10
      $B49: {  # true
        %270:ptr<private, i32, read_write> = access %data, 0i
        %271:i32 = load %270
        %x_158:i32 = let %271
        %273:f32 = convert %x_158
        %274:f32 = div %273, 10.0f
        %275:f32 = add 0.5f, %274
        store %grey, %275
        exit_if  # if_10
      }
      $B50: {  # false
        %276:f32 = load_vector_element %gl_FragCoord, 1u
        %x_163:f32 = let %276
        %278:i32 = call %tint_f32_to_i32, %x_163
        %279:bool = lt %278, 60i
        if %279 [t: $B51, f: $B52] {  # if_11
          $B51: {  # true
            %280:ptr<private, i32, read_write> = access %data, 1i
            %281:i32 = load %280
            %x_170:i32 = let %281
            %283:f32 = convert %x_170
            %284:f32 = div %283, 10.0f
            %285:f32 = add 0.5f, %284
            store %grey, %285
            exit_if  # if_11
          }
          $B52: {  # false
            %286:f32 = load_vector_element %gl_FragCoord, 1u
            %x_175:f32 = let %286
            %288:i32 = call %tint_f32_to_i32, %x_175
            %289:bool = lt %288, 90i
            if %289 [t: $B53, f: $B54] {  # if_12
              $B53: {  # true
                %290:ptr<private, i32, read_write> = access %data, 2i
                %291:i32 = load %290
                %x_182:i32 = let %291
                %293:f32 = convert %x_182
                %294:f32 = div %293, 10.0f
                %295:f32 = add 0.5f, %294
                store %grey, %295
                exit_if  # if_12
              }
              $B54: {  # false
                %296:f32 = load_vector_element %gl_FragCoord, 1u
                %x_187:f32 = let %296
                %298:i32 = call %tint_f32_to_i32, %x_187
                %299:bool = lt %298, 120i
                if %299 [t: $B55, f: $B56] {  # if_13
                  $B55: {  # true
                    %300:ptr<private, i32, read_write> = access %data, 3i
                    %301:i32 = load %300
                    %x_194:i32 = let %301
                    %303:f32 = convert %x_194
                    %304:f32 = div %303, 10.0f
                    %305:f32 = add 0.5f, %304
                    store %grey, %305
                    exit_if  # if_13
                  }
                  $B56: {  # false
                    %306:f32 = load_vector_element %gl_FragCoord, 1u
                    %x_199:f32 = let %306
                    %308:i32 = call %tint_f32_to_i32, %x_199
                    %309:bool = lt %308, 150i
                    if %309 [t: $B57, f: $B58] {  # if_14
                      $B57: {  # true
                        store %continue_execution, false
                        exit_if  # if_14
                      }
                      $B58: {  # false
                        %310:f32 = load_vector_element %gl_FragCoord, 1u
                        %x_206:f32 = let %310
                        %312:i32 = call %tint_f32_to_i32, %x_206
                        %313:bool = lt %312, 180i
                        if %313 [t: $B59, f: $B60] {  # if_15
                          $B59: {  # true
                            %314:ptr<private, i32, read_write> = access %data, 5i
                            %315:i32 = load %314
                            %x_213:i32 = let %315
                            %317:f32 = convert %x_213
                            %318:f32 = div %317, 10.0f
                            %319:f32 = add 0.5f, %318
                            store %grey, %319
                            exit_if  # if_15
                          }
                          $B60: {  # false
                            %320:f32 = load_vector_element %gl_FragCoord, 1u
                            %x_218:f32 = let %320
                            %322:i32 = call %tint_f32_to_i32, %x_218
                            %323:bool = lt %322, 210i
                            if %323 [t: $B61, f: $B62] {  # if_16
                              $B61: {  # true
                                %324:ptr<private, i32, read_write> = access %data, 6i
                                %325:i32 = load %324
                                %x_225:i32 = let %325
                                %327:f32 = convert %x_225
                                %328:f32 = div %327, 10.0f
                                %329:f32 = add 0.5f, %328
                                store %grey, %329
                                exit_if  # if_16
                              }
                              $B62: {  # false
                                %330:f32 = load_vector_element %gl_FragCoord, 1u
                                %x_230:f32 = let %330
                                %332:i32 = call %tint_f32_to_i32, %x_230
                                %333:bool = lt %332, 240i
                                if %333 [t: $B63, f: $B64] {  # if_17
                                  $B63: {  # true
                                    %334:ptr<private, i32, read_write> = access %data, 7i
                                    %335:i32 = load %334
                                    %x_237:i32 = let %335
                                    %337:f32 = convert %x_237
                                    %338:f32 = div %337, 10.0f
                                    %339:f32 = add 0.5f, %338
                                    store %grey, %339
                                    exit_if  # if_17
                                  }
                                  $B64: {  # false
                                    %340:f32 = load_vector_element %gl_FragCoord, 1u
                                    %x_242:f32 = let %340
                                    %342:i32 = call %tint_f32_to_i32, %x_242
                                    %343:bool = lt %342, 270i
                                    if %343 [t: $B65, f: $B66] {  # if_18
                                      $B65: {  # true
                                        %344:ptr<private, i32, read_write> = access %data, 8i
                                        %345:i32 = load %344
                                        %x_249:i32 = let %345
                                        %347:f32 = convert %x_249
                                        %348:f32 = div %347, 10.0f
                                        %349:f32 = add 0.5f, %348
                                        store %grey, %349
                                        exit_if  # if_18
                                      }
                                      $B66: {  # false
                                        store %continue_execution, false
                                        exit_if  # if_18
                                      }
                                    }
                                    exit_if  # if_17
                                  }
                                }
                                exit_if  # if_16
                              }
                            }
                            exit_if  # if_15
                          }
                        }
                        exit_if  # if_14
                      }
                    }
                    exit_if  # if_13
                  }
                }
                exit_if  # if_12
              }
            }
            exit_if  # if_11
          }
        }
        exit_if  # if_10
      }
    }
    %350:f32 = load %grey
    %x_253:f32 = let %350
    %352:vec3<f32> = construct %x_253, %x_253, %x_253
    %x_254:vec3<f32> = let %352
    %354:f32 = access %x_254, 0u
    %355:f32 = access %x_254, 1u
    %356:f32 = access %x_254, 2u
    %357:vec4<f32> = construct %354, %355, %356, 1.0f
    store %x_GLF_color, %357
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B67: {
    store %gl_FragCoord, %gl_FragCoord_param
    %360:void = call %main_1
    %361:vec4<f32> = load %x_GLF_color
    %362:main_out = construct %361
    %363:bool = load %continue_execution
    %364:bool = eq %363, false
    if %364 [t: $B68] {  # if_19
      $B68: {  # true
        terminate_invocation
      }
    }
    ret %362
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B69: {
    %367:bool = eq %rhs, 0i
    %368:bool = eq %lhs, -2147483648i
    %369:bool = eq %rhs, -1i
    %370:bool = and %368, %369
    %371:bool = or %367, %370
    %372:i32 = select %rhs, 1i, %371
    %373:i32 = div %lhs, %372
    ret %373
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B70: {
    %375:i32 = convert %value
    %376:bool = gte %value, -2147483648.0f
    %377:i32 = select -2147483648i, %375, %376
    %378:bool = lte %value, 2147483520.0f
    %379:i32 = select 2147483647i, %377, %378
    ret %379
  }
}

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.  *
********************************************************************
