SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_33:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %x_35:i32 = load %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_37:i32 = load %14
    %16:array<i32, 3> = construct %x_33, %x_35, %x_37
    store %arr, %16
    store %index, 1i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # 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 = block {  # true
            %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %x_46:i32 = load %19
            %x_48:i32 = load %index
            %22:bool = eq %x_46, 1i
            %23:bool = lte %x_48, 1i
            %24:bool = and %22, %23
            %25:bool = eq %24, false
            store %x_51, %25
            %26:bool = load %x_51
            store %x_52_phi, %26
            exit_if  # if_1
          }
        }
        %x_52:bool = load %x_52_phi
        %28:bool = eq %x_52, false
        if %28 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_55:i32 = load %index
        %x_56_save:i32 = let %x_55
        %31:ptr<function, i32, read_write> = access %arr, %x_56_save
        %x_57:i32 = load %31
        %33:ptr<function, i32, read_write> = access %arr, %x_56_save
        %34:i32 = add %x_57, 1i
        store %33, %34
        %x_59:i32 = load %index
        %36:i32 = add %x_59, 1i
        store %index, %36
        continue %b4
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_62:i32 = load %37
    %39:ptr<function, i32, read_write> = access %arr, %x_62
    %x_64:i32 = load %39
    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %x_66:i32 = load %41
    %x_67:bool = eq %x_64, %x_66
    store %x_77_phi, %x_67
    if %x_67 [t: %b8] {  # if_3
      %b8 = block {  # true
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_71:i32 = load %44
        %46:ptr<function, i32, read_write> = access %arr, %x_71
        %x_73:i32 = load %46
        %48:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_75:i32 = load %48
        %50:bool = eq %x_73, %x_75
        store %x_76, %50
        %51:bool = load %x_76
        store %x_77_phi, %51
        exit_if  # if_3
      }
    }
    %x_77:bool = load %x_77_phi
    store %x_87_phi, %x_77
    if %x_77 [t: %b9] {  # if_4
      %b9 = block {  # true
        %53:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_81:i32 = load %53
        %55:ptr<function, i32, read_write> = access %arr, %x_81
        %x_83:i32 = load %55
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_85:i32 = load %57
        %59:bool = eq %x_83, %x_85
        store %x_86, %59
        %60:bool = load %x_86
        store %x_87_phi, %60
        exit_if  # if_4
      }
    }
    %x_87:bool = load %x_87_phi
    if %x_87 [t: %b10, f: %b11] {  # if_5
      %b10 = block {  # true
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_92:i32 = load %62
        %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_95:i32 = load %64
        %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_98:i32 = load %66
        %68:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_101:i32 = load %68
        %70:f32 = convert %x_92
        %71:f32 = convert %x_95
        %72:f32 = convert %x_98
        %73:f32 = convert %x_101
        %74:vec4<f32> = construct %70, %71, %72, %73
        store %x_GLF_color, %74
        exit_if  # if_5
      }
      %b11 = block {  # false
        %75:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_105:i32 = load %75
        %x_106:f32 = convert %x_105
        %78:vec4<f32> = construct %x_106, %x_106, %x_106, %x_106
        store %x_GLF_color, %78
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b12 {
  %b12 = block {
    %80:void = call %main_1
    %81:vec4<f32> = load %x_GLF_color
    %82:main_out = construct %81
    ret %82
  }
}

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