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
  %x_6: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 {
    %v0:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec2<f32>, read_write> = var
    %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %8:f32 = load %7
    %9:vec2<f32> = construct %8, -580.0150146484375f
    store %v0, %9
    %10:vec2<f32> = load %v0
    %11:vec2<f32> = ceil %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    %14:f32 = negation %13
    %15:vec2<f32> = construct %14
    %16:vec2<f32> = clamp %11, %15, vec2<f32>(100.0f)
    store %v1, %16
    %17:f32 = load_vector_element %v1, 1u
    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %19:f32 = load %18
    %20:f32 = negation %19
    %21:bool = eq %17, %20
    if %21 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %23:i32 = load %22
        %24:f32 = convert %23
        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %26:i32 = load %25
        %27:f32 = convert %26
        %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %32:i32 = load %31
        %33:f32 = convert %32
        %34:vec4<f32> = construct %24, %27, %30, %33
        store %x_GLF_color, %34
        exit_if  # if_1
      }
      %b4 = block {  # false
        %35:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %36:i32 = load %35
        %37:f32 = convert %36
        %38:vec4<f32> = construct %37
        store %x_GLF_color, %38
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %40:void = call %main_1
    %41:vec4<f32> = load %x_GLF_color
    %42:main_out = construct %41
    ret %42
  }
}

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