SKIP: FAILED

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %undefined:ptr<function, f32, read_write> = var
    %x_51:ptr<function, bool, read_write> = var
    %x_52_phi:ptr<function, bool, read_write> = var
    store %undefined, 5.0f
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_10:i32 = load %8
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_11:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_12:i32 = load %12
    %14:i32 = add %x_11, %x_12
    %x_44:bool = eq %x_10, %14
    store %x_52_phi, %x_44
    %16:bool = eq %x_44, false
    if %16 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_48:f32 = load %undefined
        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %x_50:f32 = load %18
        %20:bool = gt %x_48, %x_50
        store %x_51, %20
        %21:bool = load %x_51
        store %x_52_phi, %21
        exit_if  # if_1
      }
    }
    %x_52:bool = load %x_52_phi
    if %x_52 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_15:i32 = load %23
        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_16:i32 = load %25
        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_17:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_18:i32 = load %29
        %31:f32 = convert %x_15
        %32:f32 = convert %x_16
        %33:f32 = convert %x_17
        %34:f32 = convert %x_18
        %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_19:i32 = load %36
        %x_66:f32 = convert %x_19
        %39:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
        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.  *
********************************************************************
