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, 4> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_7: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 {
    %a:ptr<function, i32, read_write> = var
    %sum:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 65536i
    %7:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %x_29:i32 = load %7
    store %sum, %x_29
    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_31:i32 = load %9
    %11:bool = eq 1i, %x_31
    if %11 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_35:i32 = load %a
        %13:i32 = sub %x_35, 1i
        store %a, %13
        exit_if  # if_1
      }
    }
    store %i, 0i
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %x_41:i32 = load %i
        %x_42:i32 = load %a
        %16:bool = lt %x_41, %x_42
        if %16 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_45:i32 = load %i
        %x_46:i32 = load %sum
        %19:i32 = add %x_46, %x_45
        store %sum, %19
        continue %b5
      }
      %b5 = block {  # continuing
        %20:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_49:i32 = load %20
        %x_50:i32 = load %i
        %23:i32 = add %x_50, %x_49
        store %i, %23
        next_iteration %b4
      }
    }
    %x_52:i32 = load %sum
    %25:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
    %x_54:i32 = load %25
    %27:bool = eq %x_52, %x_54
    if %27 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_60:i32 = load %28
        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_63:i32 = load %30
        %32:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_66:i32 = load %32
        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_69:i32 = load %34
        %36:f32 = convert %x_60
        %37:f32 = convert %x_63
        %38:f32 = convert %x_66
        %39:f32 = convert %x_69
        %40:vec4<f32> = construct %36, %37, %38, %39
        store %x_GLF_color, %40
        exit_if  # if_3
      }
      %b9 = block {  # false
        %41:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_73:i32 = load %41
        %x_74:f32 = convert %x_73
        %44:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
        store %x_GLF_color, %44
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %46:void = call %main_1
    %47:vec4<f32> = load %x_GLF_color
    %48:main_out = construct %47
    ret %48
  }
}

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