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_86:ptr<function, bool, read_write> = var
    %x_77_phi:ptr<function, bool, read_write> = var
    %x_87_phi:ptr<function, bool, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %11:i32 = load %10
    %x_33:i32 = let %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %14:i32 = load %13
    %x_35:i32 = let %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %17:i32 = load %16
    %x_37:i32 = let %17
    %19:array<i32, 3> = construct %x_33, %x_35, %x_37
    store %arr, %19
    store %index, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_51:ptr<function, bool, read_write> = var
        %x_52_phi:ptr<function, bool, read_write> = var
        store %x_52_phi, true
        if true [t: $B5] {  # if_1
          $B5: {  # true
            %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %23:i32 = load %22
            %x_46:i32 = let %23
            %25:i32 = load %index
            %x_48:i32 = let %25
            %27:bool = eq %x_46, 1i
            %28:bool = lte %x_48, 1i
            %29:bool = and %27, %28
            %30:bool = eq %29, false
            store %x_51, %30
            %31:bool = load %x_51
            store %x_52_phi, %31
            exit_if  # if_1
          }
        }
        %32:bool = load %x_52_phi
        %x_52:bool = let %32
        %34:bool = eq %x_52, false
        if %34 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %35:i32 = load %index
        %x_55:i32 = let %35
        %x_56_save:i32 = let %x_55
        %38:ptr<function, i32, read_write> = access %arr, %x_56_save
        %39:i32 = load %38
        %x_57:i32 = let %39
        %41:ptr<function, i32, read_write> = access %arr, %x_56_save
        %42:i32 = add %x_57, 1i
        store %41, %42
        %43:i32 = load %index
        %x_59:i32 = let %43
        %45:i32 = add %x_59, 1i
        store %index, %45
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %47:i32 = load %46
    %x_62:i32 = let %47
    %49:ptr<function, i32, read_write> = access %arr, %x_62
    %50:i32 = load %49
    %x_64:i32 = let %50
    %52:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %53:i32 = load %52
    %x_66:i32 = let %53
    %55:bool = eq %x_64, %x_66
    %x_67:bool = let %55
    store %x_77_phi, %x_67
    if %x_67 [t: $B8] {  # if_3
      $B8: {  # true
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %58:i32 = load %57
        %x_71:i32 = let %58
        %60:ptr<function, i32, read_write> = access %arr, %x_71
        %61:i32 = load %60
        %x_73:i32 = let %61
        %63:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %64:i32 = load %63
        %x_75:i32 = let %64
        %66:bool = eq %x_73, %x_75
        store %x_76, %66
        %67:bool = load %x_76
        store %x_77_phi, %67
        exit_if  # if_3
      }
    }
    %68:bool = load %x_77_phi
    %x_77:bool = let %68
    store %x_87_phi, %x_77
    if %x_77 [t: $B9] {  # if_4
      $B9: {  # true
        %70:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %71:i32 = load %70
        %x_81:i32 = let %71
        %73:ptr<function, i32, read_write> = access %arr, %x_81
        %74:i32 = load %73
        %x_83:i32 = let %74
        %76:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %77:i32 = load %76
        %x_85:i32 = let %77
        %79:bool = eq %x_83, %x_85
        store %x_86, %79
        %80:bool = load %x_86
        store %x_87_phi, %80
        exit_if  # if_4
      }
    }
    %81:bool = load %x_87_phi
    %x_87:bool = let %81
    if %x_87 [t: $B10, f: $B11] {  # if_5
      $B10: {  # true
        %83:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %84:i32 = load %83
        %x_92:i32 = let %84
        %86:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %87:i32 = load %86
        %x_95:i32 = let %87
        %89:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %90:i32 = load %89
        %x_98:i32 = let %90
        %92:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %93:i32 = load %92
        %x_101:i32 = let %93
        %95:f32 = convert %x_92
        %96:f32 = let %95
        %97:f32 = convert %x_95
        %98:f32 = let %97
        %99:f32 = convert %x_98
        %100:f32 = let %99
        %101:f32 = convert %x_101
        %102:vec4<f32> = construct %96, %98, %100, %101
        store %x_GLF_color, %102
        exit_if  # if_5
      }
      $B11: {  # false
        %103:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %104:i32 = load %103
        %x_105:i32 = let %104
        %106:f32 = convert %x_105
        %x_106:f32 = let %106
        %108:vec4<f32> = construct %x_106, %x_106, %x_106, %x_106
        store %x_GLF_color, %108
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %110:void = call %main_1
    %111:vec4<f32> = load %x_GLF_color
    %112:main_out = construct %111
    ret %112
  }
}

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