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
    %x_45:f32 = let %11
    %13:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
    store %v1, %13
    %14:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %15:i32 = load %14
    %x_48:i32 = let %15
    store %i, %x_48
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %x_53:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %20:i32 = load %19
        %x_55:i32 = let %20
        %22:bool = lt %x_53, %x_55
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:i32 = load %i
        %x_58:i32 = let %23
        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %26:i32 = load %25
        %x_60:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %29:i32 = load %28
        %x_62:i32 = let %29
        store %indexable, array<vec4<f32>, 2>(vec4<f32>(1.0f), vec4<f32>(0.0f))
        %31:i32 = max %x_58, %x_60
        %32:i32 = min %31, %x_62
        %33:ptr<function, vec4<f32>, read_write> = access %indexable, %32
        %34:f32 = load_vector_element %33, 0u
        %x_65:f32 = let %34
        %36:i32 = call %tint_f32_to_i32, %x_65
        store %a, %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %39:f32 = load %38
        %x_68:f32 = let %39
        %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %42:f32 = load %41
        %x_70:f32 = let %42
        %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %45:f32 = load %44
        %x_72:f32 = let %45
        %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %48:f32 = load %47
        %x_74:f32 = let %48
        %50:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %51:f32 = load %50
        %x_77:f32 = let %51
        %53:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %54:f32 = load %53
        %x_79:f32 = let %54
        %56:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %57:f32 = load %56
        %x_81:f32 = let %57
        %59:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %60:f32 = load %59
        %x_83:f32 = let %60
        %62:i32 = load %a
        %x_86:i32 = let %62
        %64:vec4<f32> = construct %x_68, %x_70, %x_72, %x_74
        %65:vec4<f32> = let %64
        %66:vec4<f32> = construct %x_77, %x_79, %x_81, %x_83
        %67:array<vec4<f32>, 2> = construct %65, %66
        store %indexable_1, %67
        %68:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
        %69:vec4<f32> = load %68
        %x_88:vec4<f32> = let %69
        store %v1, %x_88
        continue  # -> $B4
      }
      $B4: {  # continuing
        %71:i32 = load %i
        %x_89:i32 = let %71
        %73:i32 = add %x_89, 1i
        store %i, %73
        next_iteration  # -> $B3
      }
    }
    %74:vec4<f32> = load %v1
    %x_91:vec4<f32> = let %74
    store %x_GLF_color, %x_91
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %77:void = call %main_1
    %78:vec4<f32> = load %x_GLF_color
    %79:main_out = construct %78
    ret %79
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B8: {
    %81:i32 = convert %value
    %82:bool = gte %value, -2147483648.0f
    %83:i32 = select -2147483648i, %81, %82
    %84:bool = lte %value, 2147483520.0f
    %85:i32 = select 2147483647i, %83, %84
    ret %85
  }
}

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