SKIP: FAILED

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

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

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %8:f32 = load_vector_element %gl_FragCoord, 1u
    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %10:f32 = load %9
    %11:bool = gte %8, %10
    %12:i32 = select 2i, 0i, %11
    store %a, %12
    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %14:f32 = load %13
    %15:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %16:f32 = load %15
    %17:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %18:f32 = load %17
    %19:vec3<f32> = construct %14, %16, %18
    %20:i32 = load %a
    %21:f32 = access %19, %20
    store %b, %21
    %22:f32 = load %b
    %23:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %24:f32 = load %23
    %25:bool = eq %22, %24
    if %25 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %26:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:f32 = let %28
        %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:f32 = let %32
        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:f32 = let %36
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %29, %33, %37, %40
        store %x_GLF_color, %41
        exit_if  # if_1
      }
      $B4: {  # false
        %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %44
        store %x_GLF_color, %45
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B5: {
    store %gl_FragCoord, %gl_FragCoord_param
    %48:void = call %main_1
    %49:vec4<f32> = load %x_GLF_color
    %50:main_out = construct %49
    ret %50
  }
}

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