SKIP: FAILED

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

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

buf2 = struct @align(4) {
  zero:f32 @offset(0)
}

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

buf0 = 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 = block {  # root
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool -> %b2 {
  %b2 = block {
    %x_62:f32 = load_vector_element %pos, 0u
    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_64:f32 = load %9
    %11:bool = lt %x_62, %x_64
    if %11 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret true
      }
    }
    %x_69:f32 = load_vector_element %pos, 1u
    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_71:f32 = load %13
    %15:bool = gt %x_69, %x_71
    if %15 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret false
      }
    }
    %16:ptr<uniform, f32, read> = access %x_10, 0u
    %x_76:f32 = load %16
    %18:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %x_78:f32 = load %18
    %20:bool = gt %x_76, %x_78
    if %20 [t: %b5] {  # if_3
      %b5 = block {  # true
        ret true
      }
    }
    ret true
  }
}
%main_1 = func():void -> %b6 {
  %b6 = block {
    %param:ptr<function, vec2<f32>, read_write> = var
    %x_42:vec4<f32> = load %gl_FragCoord
    %24:f32 = access %x_42, 0u
    %25:f32 = access %x_42, 1u
    %26:vec2<f32> = construct %24, %25
    store %param, %26
    %x_44:bool = call %func_vf2_, %param
    if %x_44 [t: %b7] {  # if_4
      %b7 = block {  # true
        discard
        exit_if  # if_4
      }
    }
    %28:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %x_48:i32 = load %28
    %30:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %x_51:i32 = load %30
    %32:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %x_54:i32 = load %32
    %34:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %x_57:i32 = load %34
    %36:f32 = convert %x_48
    %37:f32 = convert %x_51
    %38:f32 = convert %x_54
    %39:f32 = convert %x_57
    %40:vec4<f32> = construct %36, %37, %38, %39
    store %x_GLF_color, %40
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
  %b8 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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