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

%performPartition_ = func():i32 {
  $B2: {
    %GLF_live0i:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_10:ptr<function, i32, read_write> = var
    %x_11:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %x_10, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_42:ptr<function, bool, read_write> = var
        %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %10:f32 = load_vector_element %9, 1u
        %11:bool = lt %10, 0.0f
        store %x_42, %11
        %12:bool = load %x_42
        if %12 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            %13:i32 = load %x_10
            store %x_11, %13
            continue  # -> $B4
          }
          $B6: {  # false
            store %GLF_live0i, 0i
            loop [b: $B7] {  # loop_2
              $B7: {  # body
                %x_47:bool = let true
                %15:bool = load %x_42
                if %15 [t: $B8] {  # if_2
                  $B8: {  # true
                    exit_loop  # loop_2
                  }
                }
                ret 1i
              }
            }
            %16:bool = load %x_42
            if %16 [t: $B9] {  # if_3
              $B9: {  # true
                loop [b: $B10] {  # loop_3
                  $B10: {  # body
                    ret 1i
                  }
                }
                exit_if  # if_3
              }
            }
            %17:i32 = load %x_10
            store %x_11, %17
            continue  # -> $B4
          }
        }
        unreachable
      }
      $B4: {  # continuing
        %18:i32 = load %x_11
        store %x_10, %18
        break_if true  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %19:i32 = load %x_11
    ret %19
  }
}
%main_1 = func():void {
  $B11: {
    %21:i32 = call %performPartition_
    %x_9:i32 = let %21
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

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