SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 3> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @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_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_14:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%f1_f1_ = func(%a:ptr<function, f32, read_write>):f32 {
  $B2: {
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, f32, read_write> = var
    store %b, 8i
    %9:f32 = load_vector_element %gl_FragCoord, 1u
    %10:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %11:f32 = load %10
    %12:bool = gte %9, %11
    if %12 [t: $B3] {  # if_1
      $B3: {  # true
        %13:i32 = load %b
        %14:i32 = add %13, 1i
        store %b, %14
        %15:i32 = load %b
        %16:i32 = add %15, 1i
        store %b, %16
        exit_if  # if_1
      }
    }
    %17:f32 = load %a
    %18:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %19:f32 = load %18
    %20:bool = lt %17, %19
    if %20 [t: $B4] {  # if_2
      $B4: {  # true
        %21:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
        %22:f32 = load %21
        %x_88:f32 = let %22
        ret %x_88
      }
    }
    %24:i32 = load %b
    %25:i32 = max %24, 0i
    %26:i32 = min %25, 2i
    %27:f32 = convert %26
    store %c, %27
    %28:f32 = load %c
    %x_92:f32 = let %28
    ret %x_92
  }
}
%main_1 = func():void {
  $B5: {
    %a_1:ptr<function, f32, read_write> = var
    %param:ptr<function, f32, read_write> = var
    %33:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %34:f32 = load %33
    store %param, %34
    %35:f32 = call %f1_f1_, %param
    %x_44:f32 = let %35
    store %a_1, %x_44
    %37:f32 = load %a_1
    %38:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %39:f32 = load %38
    %40:bool = eq %37, %39
    if %40 [t: $B6, f: $B7] {  # if_3
      $B6: {  # true
        %41:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
        %42:i32 = load %41
        %43:f32 = convert %42
        %44:f32 = let %43
        %45:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:f32 = let %47
        %49:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %50:i32 = load %49
        %51:f32 = convert %50
        %52:f32 = let %51
        %53:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
        %54:i32 = load %53
        %55:f32 = convert %54
        %56:vec4<f32> = construct %44, %48, %52, %55
        store %x_GLF_color, %56
        exit_if  # if_3
      }
      $B7: {  # false
        %57:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %58:i32 = load %57
        %59:f32 = convert %58
        %60:vec4<f32> = construct %59
        store %x_GLF_color, %60
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %63:void = call %main_1
    %64:vec4<f32> = load %x_GLF_color
    %65:main_out = construct %64
    ret %65
  }
}

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