SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %7:i32 = load %6
    %x_32:i32 = let %7
    store %i, %x_32
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %9:i32 = load %i
        %x_37:i32 = let %9
        %11:bool = gte %x_37, 0i
        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_40:i32 = let %12
        %14:i32 = call %tint_mod_i32, %x_40, 2i
        %16:bool = eq %14, 0i
        if %16 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %18:i32 = load %17
            %x_47:i32 = let %18
            %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %21:i32 = load %20
            %x_50:i32 = let %21
            %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %24:i32 = load %23
            %x_53:i32 = let %24
            %26:f32 = convert %x_47
            %27:f32 = let %26
            %28:f32 = convert %x_50
            %29:f32 = let %28
            %30:f32 = convert %x_53
            %31:vec4<f32> = construct 1.0f, %27, %29, %30
            store %x_GLF_color, %31
            exit_if  # if_2
          }
          $B8: {  # false
            %32:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
            %33:f32 = load %32
            %x_57:f32 = let %33
            %35:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
            store %x_GLF_color, %35
            exit_if  # if_2
          }
        }
        %36:i32 = load %i
        %x_59:i32 = let %36
        %38:i32 = sub %x_59, 1i
        store %i, %38
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %40:void = call %main_1
    %41:vec4<f32> = load %x_GLF_color
    %42:main_out = construct %41
    ret %42
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %45:bool = eq %rhs, 0i
    %46:bool = eq %lhs, -2147483648i
    %47:bool = eq %rhs, -1i
    %48:bool = and %46, %47
    %49:bool = or %45, %48
    %50:i32 = select %rhs, 1i, %49
    %51:i32 = let %50
    %52:i32 = div %lhs, %51
    %53:i32 = mul %52, %51
    %54:i32 = sub %lhs, %53
    ret %54
  }
}

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