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: {
    %v:ptr<function, vec4<f32>, 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_36:i32 = let %7
    %9:f32 = convert %x_36
    %x_37:f32 = let %9
    %11:vec4<f32> = construct %x_37, %x_37, %x_37, %x_37
    store %v, %11
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %13:i32 = load %12
    %x_40:i32 = let %13
    store %i, %x_40
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %15:i32 = load %i
        %x_45:i32 = let %15
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %18:i32 = load %17
        %x_47:i32 = let %18
        %20:bool = lt %x_45, %x_47
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:i32 = load %i
        %x_50:i32 = let %21
        %23:i32 = load %i
        %x_51:i32 = let %23
        %25:u32 = access vec3<u32>(0u, 1u, 2u), %x_50
        %26:f32 = convert %x_51
        store_vector_element %v, %25, %26
        continue  # -> $B4
      }
      $B4: {  # continuing
        %27:i32 = load %i
        %x_55:i32 = let %27
        %29:i32 = add %x_55, 1i
        store %i, %29
        next_iteration  # -> $B3
      }
    }
    %30:vec4<f32> = load %v
    %x_57:vec4<f32> = let %30
    %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %33:i32 = load %32
    %x_59:i32 = let %33
    %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %36:i32 = load %35
    %x_62:i32 = let %36
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %39:i32 = load %38
    %x_65:i32 = let %39
    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %42:i32 = load %41
    %x_68:i32 = let %42
    %44:f32 = convert %x_59
    %45:f32 = let %44
    %46:f32 = convert %x_62
    %47:f32 = let %46
    %48:f32 = convert %x_65
    %49:f32 = let %48
    %50:f32 = convert %x_68
    %51:vec4<f32> = construct %45, %47, %49, %50
    %52:vec4<bool> = eq %x_57, %51
    %53:bool = all %52
    if %53 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %x_77:i32 = let %55
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %58:i32 = load %57
        %x_80:i32 = let %58
        %60:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %61:i32 = load %60
        %x_83:i32 = let %61
        %63:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %64:i32 = load %63
        %x_86:i32 = let %64
        %66:f32 = convert %x_77
        %67:f32 = let %66
        %68:f32 = convert %x_80
        %69:f32 = let %68
        %70:f32 = convert %x_83
        %71:f32 = let %70
        %72:f32 = convert %x_86
        %73:vec4<f32> = construct %67, %69, %71, %72
        store %x_GLF_color, %73
        exit_if  # if_2
      }
      $B8: {  # false
        %74:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %75:i32 = load %74
        %x_90:i32 = let %75
        %77:f32 = convert %x_90
        %x_91:f32 = let %77
        %79:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
        store %x_GLF_color, %79
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %81:void = call %main_1
    %82:vec4<f32> = load %x_GLF_color
    %83:main_out = construct %82
    ret %83
  }
}

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