SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # root
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void {
  $B2: {
    %b:ptr<function, bool, read_write> = var
    store %b, true
    %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %7:f32 = load_vector_element %6, 0u
    %x_38:f32 = let %7
    %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %10:f32 = load_vector_element %9, 1u
    %x_40:f32 = let %10
    %12:bool = gt %x_38, %x_40
    if %12 [t: $B3] {  # if_1
      $B3: {  # true
        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %14:f32 = load_vector_element %13, 0u
        %x_45:f32 = let %14
        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %17:f32 = load_vector_element %16, 1u
        %x_47:f32 = let %17
        %19:bool = lt %x_45, %x_47
        if %19 [t: $B4] {  # if_2
          $B4: {  # true
            store %b, false
            exit_if  # if_2
          }
        }
        exit_if  # if_1
      }
    }
    %20:bool = load %b
    %x_51:bool = let %20
    if %x_51 [t: $B5, f: $B6] {  # if_3
      $B5: {  # true
        %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %23:i32 = load %22
        %x_10:i32 = let %23
        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %26:i32 = load %25
        %x_11:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %29:i32 = load %28
        %x_12:i32 = let %29
        %31:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %32:i32 = load %31
        %x_13:i32 = let %32
        %34:f32 = convert %x_10
        %35:f32 = let %34
        %36:f32 = convert %x_11
        %37:f32 = let %36
        %38:f32 = convert %x_12
        %39:f32 = let %38
        %40:f32 = convert %x_13
        %41:vec4<f32> = construct %35, %37, %39, %40
        store %x_GLF_color, %41
        exit_if  # if_3
      }
      $B6: {  # false
        %42:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %43:i32 = load %42
        %x_14:i32 = let %43
        %45:f32 = convert %x_14
        %x_65:f32 = let %45
        %47:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
        store %x_GLF_color, %47
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %49:void = call %main_1
    %50:vec4<f32> = load %x_GLF_color
    %51:main_out = construct %50
    ret %51
  }
}

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