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
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    %GLF_dead5cols:ptr<function, i32, read_write> = var
    %GLF_dead5rows:ptr<function, i32, read_write> = var
    %GLF_dead5c:ptr<function, i32, read_write> = var
    %GLF_dead5r:ptr<function, i32, read_write> = var
    %msb10:ptr<function, i32, read_write> = var
    %donor_replacementGLF_dead5sums:ptr<function, array<f32, 9>, read_write> = var
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %11:i32 = load %i
        %x_45:i32 = let %11
        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %14:f32 = load_vector_element %13, 0u
        %x_47:f32 = let %14
        %16:i32 = call %tint_f32_to_i32, %x_47
        %18:bool = gte %x_45, %16
        if %18 [t: $B5] {  # if_1
          $B5: {  # true
            exit_loop  # loop_1
          }
        }
        %19:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %20:f32 = load_vector_element %19, 1u
        %x_53:f32 = let %20
        %22:bool = gt 0.0f, %x_53
        if %22 [t: $B6] {  # if_2
          $B6: {  # true
            store %GLF_dead5cols, 2i
            loop [b: $B7, c: $B8] {  # loop_2
              $B7: {  # body
                %23:i32 = load %GLF_dead5cols
                %x_61:i32 = let %23
                %25:bool = lte %x_61, 4i
                if %25 [t: $B9, f: $B10] {  # if_3
                  $B9: {  # true
                    exit_if  # if_3
                  }
                  $B10: {  # false
                    exit_loop  # loop_2
                  }
                }
                store %GLF_dead5rows, 2i
                loop [b: $B11, c: $B12] {  # loop_3
                  $B11: {  # body
                    %26:i32 = load %GLF_dead5rows
                    %x_68:i32 = let %26
                    %28:bool = lte %x_68, 4i
                    if %28 [t: $B13, f: $B14] {  # if_4
                      $B13: {  # true
                        exit_if  # if_4
                      }
                      $B14: {  # false
                        exit_loop  # loop_3
                      }
                    }
                    store %GLF_dead5c, 0i
                    loop [b: $B15, c: $B16] {  # loop_4
                      $B15: {  # body
                        %29:i32 = load %GLF_dead5c
                        %x_75:i32 = let %29
                        %31:i32 = load %GLF_dead5cols
                        %x_76:i32 = let %31
                        %33:bool = lt %x_75, %x_76
                        if %33 [t: $B17, f: $B18] {  # if_5
                          $B17: {  # true
                            exit_if  # if_5
                          }
                          $B18: {  # false
                            exit_loop  # loop_4
                          }
                        }
                        store %GLF_dead5r, 0i
                        loop [b: $B19, c: $B20] {  # loop_5
                          $B19: {  # body
                            %34:i32 = load %GLF_dead5r
                            %x_83:i32 = let %34
                            %36:i32 = load %GLF_dead5rows
                            %x_84:i32 = let %36
                            %38:bool = lt %x_83, %x_84
                            if %38 [t: $B21, f: $B22] {  # if_6
                              $B21: {  # true
                                exit_if  # if_6
                              }
                              $B22: {  # false
                                exit_loop  # loop_5
                              }
                            }
                            %39:i32 = load %msb10
                            %x_87:i32 = let %39
                            switch %x_87 [c: (1i 8i, $B23), c: (default, $B24)] {  # switch_1
                              $B23: {  # case
                                %41:i32 = load %msb10
                                %x_90:i32 = let %41
                                %43:i32 = load %msb10
                                %x_92:i32 = let %43
                                %45:i32 = load %msb10
                                %x_95:i32 = let %45
                                %47:bool = gte %x_90, 0i
                                %48:bool = lt %x_92, 9i
                                %49:bool = and %47, %48
                                %50:i32 = select 0i, %x_95, %49
                                %x_96:i32 = let %50
                                %52:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
                                %53:f32 = load %52
                                %x_98:f32 = let %53
                                %55:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
                                %56:f32 = add %x_98, 1.0f
                                store %55, %56
                                exit_switch  # switch_1
                              }
                              $B24: {  # case
                                exit_switch  # switch_1
                              }
                            }
                            continue  # -> $B20
                          }
                          $B20: {  # continuing
                            %57:i32 = load %GLF_dead5r
                            %x_101:i32 = let %57
                            %59:i32 = add %x_101, 1i
                            store %GLF_dead5r, %59
                            next_iteration  # -> $B19
                          }
                        }
                        continue  # -> $B16
                      }
                      $B16: {  # continuing
                        %60:i32 = load %GLF_dead5c
                        %x_103:i32 = let %60
                        %62:i32 = add %x_103, 1i
                        store %GLF_dead5c, %62
                        next_iteration  # -> $B15
                      }
                    }
                    %63:i32 = load %msb10
                    %x_105:i32 = let %63
                    %65:i32 = add %x_105, 1i
                    store %msb10, %65
                    continue  # -> $B12
                  }
                  $B12: {  # continuing
                    %66:i32 = load %GLF_dead5rows
                    %x_107:i32 = let %66
                    %68:i32 = add %x_107, 1i
                    store %GLF_dead5rows, %68
                    next_iteration  # -> $B11
                  }
                }
                continue  # -> $B8
              }
              $B8: {  # continuing
                %69:i32 = load %GLF_dead5cols
                %x_109:i32 = let %69
                %71:i32 = add %x_109, 1i
                store %GLF_dead5cols, %71
                next_iteration  # -> $B7
              }
            }
            exit_if  # if_2
          }
        }
        %72:i32 = load %i
        %x_111:i32 = let %72
        %74:i32 = add %x_111, 1i
        store %i, %74
        continue  # -> $B4
      }
      $B4: {  # continuing
        %75:i32 = load %i
        %x_113:i32 = let %75
        %77:bool = lt %x_113, 200i
        %78:bool = eq %77, false
        break_if %78  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B25: {
    %80:void = call %main_1
    %81:vec4<f32> = load %x_GLF_color
    %82:main_out = construct %81
    ret %82
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B26: {
    %84:i32 = convert %value
    %85:bool = gte %value, -2147483648.0f
    %86:i32 = select -2147483648i, %84, %85
    %87:bool = lte %value, 2147483520.0f
    %88:i32 = select 2147483647i, %86, %87
    ret %88
  }
}

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