SKIP: FAILED

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

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

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

$B1: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %7:i32 = load %6
    %x_27:i32 = let %7
    store %a, %x_27
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %9:i32 = load %i
        %x_32:i32 = let %9
        %11:bool = lt %x_32, 3i
        if %11 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %12:i32 = load %i
        %x_35:i32 = let %12
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %15:i32 = load %14
        %x_37:i32 = let %15
        %17:bool = eq %x_35, %x_37
        if %17 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %18:i32 = load %a
            %x_42:i32 = let %18
            %20:i32 = add %x_42, 1i
            store %a, %20
            exit_if  # if_2
          }
          $B8: {  # false
            %21:i32 = load %a
            %x_44:i32 = let %21
            %23:i32 = load %i
            %x_45:i32 = let %23
            %25:i32 = call %tint_div_i32, %x_44, %x_45
            store %a, %25
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %27:i32 = load %i
        %x_47:i32 = let %27
        %29:i32 = add %x_47, 1i
        store %i, %29
        next_iteration  # -> $B3
      }
    }
    %30:i32 = load %a
    %x_49:i32 = let %30
    %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %33:i32 = load %32
    %x_51:i32 = let %33
    %35:bool = eq %x_49, %x_51
    if %35 [t: $B9, f: $B10] {  # if_3
      $B9: {  # true
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %37:i32 = load %36
        %x_57:i32 = let %37
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %40:i32 = load %39
        %x_60:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %43:i32 = load %42
        %x_63:i32 = let %43
        %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %46:i32 = load %45
        %x_66:i32 = let %46
        %48:f32 = convert %x_57
        %49:f32 = let %48
        %50:f32 = convert %x_60
        %51:f32 = let %50
        %52:f32 = convert %x_63
        %53:f32 = let %52
        %54:f32 = convert %x_66
        %55:vec4<f32> = construct %49, %51, %53, %54
        store %x_GLF_color, %55
        exit_if  # if_3
      }
      $B10: {  # false
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %57:i32 = load %56
        %x_70:i32 = let %57
        %59:f32 = convert %x_70
        %x_71:f32 = let %59
        %61:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
        store %x_GLF_color, %61
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %63:void = call %main_1
    %64:vec4<f32> = load %x_GLF_color
    %65:main_out = construct %64
    ret %65
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B12: {
    %68:bool = eq %rhs, 0i
    %69:bool = eq %lhs, -2147483648i
    %70:bool = eq %rhs, -1i
    %71:bool = and %69, %70
    %72:bool = or %68, %71
    %73:i32 = select %rhs, 1i, %72
    %74:i32 = div %lhs, %73
    ret %74
  }
}

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