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_5: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 {
    %x_28:ptr<function, i32, read_write> = var
    %x_31:ptr<function, i32, read_write> = var
    %x_29:ptr<function, i32, read_write> = var
    %x_42:ptr<function, i32, read_write> = var
    %x_24:i32 = let -2147483648i
    %9:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
    %10:i32 = load %9
    store %x_28, %10
    store %x_31, 1i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_32:ptr<function, i32, read_write> = var
        %12:i32 = load %x_28
        store %x_42, %12
        %13:i32 = load %x_31
        %14:i32 = sub %x_24, 1i
        %15:bool = lte %13, %14
        if %15 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %16:i32 = load %x_28
        %17:i32 = load %x_31
        %18:i32 = add %16, %17
        store %x_29, %18
        %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %20:i32 = load %19
        %21:bool = eq %20, 1i
        if %21 [t: %b7] {  # if_2
          %b7 = block {  # true
            %22:i32 = load %x_29
            store %x_42, %22
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %23:i32 = load %x_31
        %24:i32 = add %23, 1i
        store %x_32, %24
        %25:i32 = load %x_29
        store %x_28, %25
        %26:i32 = load %x_32
        store %x_31, %26
        next_iteration %b3
      }
    }
    %27:i32 = load %x_42
    %28:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
    %29:i32 = load %28
    %30:bool = eq %27, %29
    if %30 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %31:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %32:i32 = load %31
        %x_51:f32 = convert %32
        %34:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %35:i32 = load %34
        %x_54:f32 = convert %35
        %37:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
        store %x_GLF_color, %37
        exit_if  # if_3
      }
      %b9 = block {  # false
        %38:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %40
        store %x_GLF_color, %41
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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