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_7: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
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%computePoint_ = func():vec3<f32> {
  $B2: {
    %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %7:f32 = load_vector_element %6, 0u
    %x_48:f32 = let %7
    %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %10:f32 = load_vector_element %9, 1u
    %x_50:f32 = let %10
    %12:bool = gt %x_48, %x_50
    if %12 [t: $B3] {  # if_1
      $B3: {  # true
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    ret vec3<f32>(0.0f)
  }
}
%main_1 = func():void {
  $B4: {
    %x_34:ptr<function, bool, read_write> = var, false
    loop [b: $B5] {  # loop_1
      $B5: {  # body
        %15:vec3<f32> = call %computePoint_
        %x_36:vec3<f32> = let %15
        %17:f32 = load_vector_element %gl_FragCoord, 0u
        %x_41:f32 = let %17
        %19:bool = lt %x_41, 0.0f
        if %19 [t: $B6] {  # if_2
          $B6: {  # true
            store %x_34, true
            exit_loop  # loop_1
          }
        }
        %20:vec3<f32> = call %computePoint_
        %x_45:vec3<f32> = let %20
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        store %x_34, true
        exit_loop  # loop_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B7: {
    store %gl_FragCoord, %gl_FragCoord_param
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    %27:bool = load %continue_execution
    %28:bool = eq %27, false
    if %28 [t: $B8] {  # if_3
      $B8: {  # true
        terminate_invocation
      }
    }
    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.  *
********************************************************************
