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
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %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: {
    %x_30:ptr<function, bool, read_write> = var
    %x_47:ptr<function, f32, read_write> = var
    %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %8:f32 = load_vector_element %7, 0u
    %x_29:f32 = let %8
    %10:bool = gt %x_29, 1.0f
    store %x_30, %10
    %11:bool = load %x_30
    if %11 [t: $B3] {  # if_1
      $B3: {  # true
        loop [b: $B4] {  # loop_1
          $B4: {  # body
            %x_47_phi:ptr<function, f32, read_write> = var
            loop [b: $B5, c: $B6] {  # loop_2
              $B5: {  # body
                %13:f32 = load_vector_element %gl_FragCoord, 0u
                %x_41:f32 = let %13
                %15:bool = lt %x_41, 0.0f
                if %15 [t: $B7] {  # if_2
                  $B7: {  # true
                    %16:bool = load %x_30
                    if %16 [t: $B8, f: $B9] {  # if_3
                      $B8: {  # true
                        store %x_47_phi, 1.0f
                        exit_loop  # loop_2
                      }
                      $B9: {  # false
                        continue  # -> $B6
                      }
                    }
                    exit_if  # if_2
                  }
                }
                store %x_47_phi, 0.0f
                exit_loop  # loop_2
              }
              $B6: {  # continuing
                next_iteration  # -> $B5
              }
            }
            %17:f32 = load %x_47_phi
            store %x_47, %17
            exit_loop  # loop_1
          }
        }
        %x_48_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
        %19:f32 = load %x_47
        store_vector_element %x_48_1, 1u, %19
        %20:vec4<f32> = load %x_48_1
        %x_48:vec4<f32> = let %20
        store %x_GLF_color, %x_48
        exit_if  # if_1
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %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.  *
********************************************************************
