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
    %x_71:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %12:f32 = load %11
    %x_73:f32 = let %12
    %14:bool = gte %x_71, %x_73
    if %14 [t: $B3] {  # if_1
      $B3: {  # true
        %15:i32 = load %b
        %x_77:i32 = let %15
        %17:i32 = add %x_77, 1i
        store %b, %17
        %18:i32 = load %b
        %x_79:i32 = let %18
        %20:i32 = add %x_79, 1i
        store %b, %20
        exit_if  # if_1
      }
    }
    %21:f32 = load %a
    %x_81:f32 = let %21
    %23:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %24:f32 = load %23
    %x_83:f32 = let %24
    %26:bool = lt %x_81, %x_83
    if %26 [t: $B4] {  # if_2
      $B4: {  # true
        %27:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
        %28:f32 = load %27
        %x_88:f32 = let %28
        ret %x_88
      }
    }
    %30:i32 = load %b
    %x_89:i32 = let %30
    %32:i32 = max %x_89, 0i
    %33:i32 = min %32, 2i
    %34:f32 = convert %33
    store %c, %34
    %35:f32 = load %c
    %x_92:f32 = let %35
    ret %x_92
  }
}
%main_1 = func():void {
  $B5: {
    %a_1:ptr<function, f32, read_write> = var
    %param:ptr<function, f32, read_write> = var
    %40:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %41:f32 = load %40
    %x_43:f32 = let %41
    store %param, %x_43
    %43:f32 = call %f1_f1_, %param
    %x_44:f32 = let %43
    store %a_1, %x_44
    %45:f32 = load %a_1
    %x_45:f32 = let %45
    %47:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %48:f32 = load %47
    %x_47:f32 = let %48
    %50:bool = eq %x_45, %x_47
    if %50 [t: $B6, f: $B7] {  # if_3
      $B6: {  # true
        %51:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
        %52:i32 = load %51
        %x_53:i32 = let %52
        %54:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %55:i32 = load %54
        %x_56:i32 = let %55
        %57:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %58:i32 = load %57
        %x_59:i32 = let %58
        %60:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
        %61:i32 = load %60
        %x_62:i32 = let %61
        %63:f32 = convert %x_53
        %64:f32 = let %63
        %65:f32 = convert %x_56
        %66:f32 = let %65
        %67:f32 = convert %x_59
        %68:f32 = let %67
        %69:f32 = convert %x_62
        %70:vec4<f32> = construct %64, %66, %68, %69
        store %x_GLF_color, %70
        exit_if  # if_3
      }
      $B7: {  # false
        %71:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
        %72:i32 = load %71
        %x_66:i32 = let %72
        %74:f32 = convert %x_66
        %x_67:f32 = let %74
        %76:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
        store %x_GLF_color, %76
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    ret %81
  }
}

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