SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
  v1:vec2<f32> @offset(0)
}

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
    %6:f32 = load_vector_element %5, 0u
    %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
    %8:f32 = load_vector_element %7, 1u
    %9:bool = lt %6, %8
    if %9 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %10:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %11:i32 = load %10
        %12:f32 = convert %11
        %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %14:i32 = load %13
        %15:f32 = convert %14
        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %17:i32 = load %16
        %18:f32 = convert %17
        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %20:i32 = load %19
        %21:f32 = convert %20
        %22:vec4<f32> = construct %12, %15, %18, %21
        store %x_GLF_color, %22
        %23:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
        %24:f32 = load_vector_element %23, 0u
        %25:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
        %26:f32 = load_vector_element %25, 1u
        %27:bool = gt %24, %26
        if %27 [t: %b5] {  # if_2
          %b5 = block {  # true
            %28:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
            %29:i32 = load %28
            %30:f32 = convert %29
            %31:vec4<f32> = construct %30
            store %x_GLF_color, %31
            exit_if  # if_2
          }
        }
        ret
      }
      %b4 = block {  # false
        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:vec4<f32> = construct %34
        store %x_GLF_color, %35
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %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.  *
********************************************************************
