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, 6> @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: {
    %arr:ptr<function, array<i32, 3>, read_write> = var
    %index:ptr<function, i32, read_write> = var
    %x_76:ptr<function, bool, read_write> = var
    %x_77:ptr<function, bool, read_write> = var
    %x_86:ptr<function, bool, read_write> = var
    %x_87:ptr<function, bool, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %11:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %13:i32 = load %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %15:i32 = load %14
    %16:array<i32, 3> = construct %11, %13, %15
    store %arr, %16
    store %index, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_51:ptr<function, bool, read_write> = var
        %x_52:ptr<function, bool, read_write> = var
        store %x_52, true
        if true [t: $B5] {  # if_1
          $B5: {  # true
            %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %20:i32 = load %19
            %21:bool = eq %20, 1i
            %22:i32 = load %index
            %23:bool = lte %22, 1i
            %24:bool = and %21, %23
            %25:bool = eq %24, false
            store %x_51, %25
            %26:bool = load %x_51
            store %x_52, %26
            exit_if  # if_1
          }
        }
        %27:bool = load %x_52
        %28:bool = eq %27, false
        if %28 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %29:i32 = load %index
        %x_55:i32 = let %29
        %x_56_save:i32 = let %x_55
        %32:ptr<function, i32, read_write> = access %arr, %x_56_save
        %33:ptr<function, i32, read_write> = access %arr, %x_55
        %34:i32 = load %33
        %35:i32 = add %34, 1i
        store %32, %35
        %36:i32 = load %index
        %37:i32 = add %36, 1i
        store %index, %37
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %39:i32 = load %38
    %40:ptr<function, i32, read_write> = access %arr, %39
    %41:i32 = load %40
    %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %43:i32 = load %42
    %44:bool = eq %41, %43
    %x_67:bool = let %44
    store %x_77, %x_67
    if %x_67 [t: $B8] {  # if_3
      $B8: {  # true
        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %47:i32 = load %46
        %48:ptr<function, i32, read_write> = access %arr, %47
        %49:i32 = load %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %51:i32 = load %50
        %52:bool = eq %49, %51
        store %x_76, %52
        %53:bool = load %x_76
        store %x_77, %53
        exit_if  # if_3
      }
    }
    %54:bool = load %x_77
    store %x_87, %54
    %55:bool = load %x_77
    if %55 [t: $B9] {  # if_4
      $B9: {  # true
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %57:i32 = load %56
        %58:ptr<function, i32, read_write> = access %arr, %57
        %59:i32 = load %58
        %60:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %61:i32 = load %60
        %62:bool = eq %59, %61
        store %x_86, %62
        %63:bool = load %x_86
        store %x_87, %63
        exit_if  # if_4
      }
    }
    %64:bool = load %x_87
    if %64 [t: $B10, f: $B11] {  # if_5
      $B10: {  # true
        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %66:i32 = load %65
        %67:f32 = convert %66
        %68:f32 = let %67
        %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %70:i32 = load %69
        %71:f32 = convert %70
        %72:f32 = let %71
        %73:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %74:i32 = load %73
        %75:f32 = convert %74
        %76:f32 = let %75
        %77:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %78:i32 = load %77
        %79:f32 = convert %78
        %80:vec4<f32> = construct %68, %72, %76, %79
        store %x_GLF_color, %80
        exit_if  # if_5
      }
      $B11: {  # false
        %81:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %82:i32 = load %81
        %83:f32 = convert %82
        %84:vec4<f32> = construct %83
        store %x_GLF_color, %84
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %86:void = call %main_1
    %87:vec4<f32> = load %x_GLF_color
    %88:main_out = construct %87
    ret %88
  }
}

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