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, 3> @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: {
    %i:ptr<function, i32, read_write> = var
    %v:ptr<function, vec4<f32>, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %7:i32 = load %6
    %x_30:i32 = let %7
    store %i, %x_30
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %9:i32 = load %i
        %x_35:i32 = let %9
        %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %12:i32 = load %11
        %x_37:i32 = let %12
        %14:bool = lt %x_35, %x_37
        if %14 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        store %v, vec4<f32>(0.39215686917304992676f, 0.0f, 0.0f, 0.0f)
        %15:f32 = load_vector_element %v, 0u
        %x_42:f32 = let %15
        %17:i32 = load %i
        %x_44:i32 = let %17
        %19:i32 = call %tint_f32_to_i32, %x_42
        %21:bool = gt %19, %x_44
        if %21 [t: $B7] {  # if_2
          $B7: {  # true
            %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %23:i32 = load %22
            %x_49:i32 = let %23
            %25:f32 = convert %x_49
            %x_50:f32 = let %25
            %27:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
            store %x_GLF_color, %27
            ret
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %28:i32 = load %i
        %x_52:i32 = let %28
        %30:i32 = add %x_52, 1i
        store %i, %30
        next_iteration  # -> $B3
      }
    }
    %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %32:i32 = load %31
    %x_55:i32 = let %32
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %35:i32 = load %34
    %x_58:i32 = let %35
    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %38:i32 = load %37
    %x_61:i32 = let %38
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %41:i32 = load %40
    %x_64:i32 = let %41
    %43:f32 = convert %x_55
    %44:f32 = let %43
    %45:f32 = convert %x_58
    %46:f32 = let %45
    %47:f32 = convert %x_61
    %48:f32 = let %47
    %49:f32 = convert %x_64
    %50:vec4<f32> = construct %44, %46, %48, %49
    store %x_GLF_color, %50
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %52:void = call %main_1
    %53:vec4<f32> = load %x_GLF_color
    %54:main_out = construct %53
    ret %54
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B9: {
    %56:i32 = convert %value
    %57:bool = gte %value, -2147483648.0f
    %58:i32 = select -2147483648i, %56, %57
    %59:bool = lte %value, 2147483520.0f
    %60:i32 = select 2147483647i, %58, %59
    ret %60
  }
}

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