SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 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_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %v1:ptr<function, vec4<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<vec4<f32>, 2>, read_write> = var
    %indexable_1:ptr<function, array<vec4<f32>, 2>, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %11:f32 = load %10
    %12:vec4<f32> = construct %11
    store %v1, %12
    %13:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %14:i32 = load %13
    store %i, %14
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %15:i32 = load %i
        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %17:i32 = load %16
        %18:bool = lt %15, %17
        if %18 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %19:i32 = load %i
        %x_58:i32 = let %19
        %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %22:i32 = load %21
        %x_60:i32 = let %22
        %24:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %25:i32 = load %24
        %x_62:i32 = let %25
        store %indexable, array<vec4<f32>, 2>(vec4<f32>(1.0f), vec4<f32>(0.0f))
        %27:i32 = max %x_58, %x_60
        %28:i32 = min %27, %x_62
        %29:ptr<function, vec4<f32>, read_write> = access %indexable, %28
        %30:f32 = load_vector_element %29, 0u
        %31:i32 = call %tint_f32_to_i32, %30
        store %a, %31
        %33:i32 = load %a
        %x_86:i32 = let %33
        %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %36:f32 = load %35
        %37:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %38:f32 = load %37
        %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %40:f32 = load %39
        %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %42:f32 = load %41
        %43:vec4<f32> = construct %36, %38, %40, %42
        %44:vec4<f32> = let %43
        %45:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %46:f32 = load %45
        %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %48:f32 = load %47
        %49:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %50:f32 = load %49
        %51:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %52:f32 = load %51
        %53:vec4<f32> = construct %46, %48, %50, %52
        %54:array<vec4<f32>, 2> = construct %44, %53
        store %indexable_1, %54
        %55:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
        %56:vec4<f32> = load %55
        store %v1, %56
        continue  # -> $B4
      }
      $B4: {  # continuing
        %57:i32 = load %i
        %58:i32 = add %57, 1i
        store %i, %58
        next_iteration  # -> $B3
      }
    }
    %59:vec4<f32> = load %v1
    store %x_GLF_color, %59
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B8: {
    %65:i32 = convert %value
    %66:bool = gte %value, -2147483648.0f
    %67:i32 = select -2147483648i, %65, %66
    %68:bool = lte %value, 2147483520.0f
    %69:i32 = select 2147483647i, %67, %68
    ret %69
  }
}

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