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)
}

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
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %f:ptr<function, f32, read_write> = var
    %x_35:f32 = load_vector_element %gl_FragCoord, 1u
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_37:f32 = load %8
    %10:bool = lt %x_35, %x_37
    %11:f32 = select 1.0f, 0.10000000149011611938f, %10
    %12:f32 = trunc %11
    %13:f32 = fract %12
    store %f, %13
    %x_42:f32 = load %f
    %15:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %x_44:f32 = load %15
    %17:bool = eq %x_42, %x_44
    if %17 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_50:i32 = load %18
        %20:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_53:i32 = load %20
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_56:i32 = load %22
        %24:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_59:i32 = load %24
        %26:f32 = convert %x_50
        %27:f32 = convert %x_53
        %28:f32 = convert %x_56
        %29:f32 = convert %x_59
        %30:vec4<f32> = construct %26, %27, %28, %29
        store %x_GLF_color, %30
        exit_if  # if_1
      }
      %b4 = block {  # false
        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_63:i32 = load %31
        %x_64:f32 = convert %x_63
        %34:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
        store %x_GLF_color, %34
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
  %b5 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %37:void = call %main_1
    %38:vec4<f32> = load %x_GLF_color
    %39:main_out = construct %38
    ret %39
  }
}

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