SKIP: FAILED

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

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

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

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

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %f:ptr<function, f32, read_write> = var
    %x_48:ptr<function, bool, read_write> = var
    %x_49_phi:ptr<function, bool, read_write> = var
    store %f, 1626.509033203125f
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_35:i32 = load %8
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_37:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_39:i32 = load %12
    %14:i32 = add %x_37, %x_39
    %x_41:bool = eq %x_35, %14
    store %x_49_phi, %x_41
    %16:bool = eq %x_41, false
    if %16 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_45:f32 = load %f
        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %x_47:f32 = load %18
        %20:bool = gt %x_45, %x_47
        store %x_48, %20
        %21:bool = load %x_48
        store %x_49_phi, %21
        exit_if  # if_1
      }
    }
    %x_49:bool = load %x_49_phi
    if %x_49 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_54:i32 = load %23
        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_57:i32 = load %25
        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_60:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_63:i32 = load %29
        %31:f32 = convert %x_54
        %32:f32 = convert %x_57
        %33:f32 = convert %x_60
        %34:f32 = convert %x_63
        %35:vec4<f32> = construct %31, %32, %33, %34
        store %x_GLF_color, %35
        exit_if  # if_2
      }
      %b5 = block {  # false
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_67:i32 = load %36
        %x_68:f32 = convert %x_67
        %39:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
        store %x_GLF_color, %39
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %41:void = call %main_1
    %42:vec4<f32> = load %x_GLF_color
    %43:main_out = construct %42
    ret %43
  }
}

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