SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 2> @offset(0)
}

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

%b1 = block {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %7:i32 = load %6
    %8:f32 = convert %7
    %9:vec4<f32> = construct %8
    store %x_GLF_color, %9
    %10:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %11:i32 = load %10
    store %i, %11
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %12:i32 = load %i
        %13:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %14:i32 = load %13
        %15:bool = lt %12, %14
        if %15 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %16:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
        %17:f32 = load %16
        %18:i32 = load %i
        %19:f32 = convert %18
        %20:bool = lte %17, %19
        %21:bool = eq %20, false
        if %21 [t: %b7] {  # if_2
          %b7 = block {  # true
            %22:vec4<f32> = load %x_GLF_color
            %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
            %24:f32 = load %23
            %25:i32 = load %i
            %26:f32 = convert %25
            %27:i32 = load %i
            %28:f32 = convert %27
            %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
            %30:f32 = load %29
            %31:vec4<f32> = construct %24, %26, %28, %30
            %32:vec4<f32> = add %22, %31
            store %x_GLF_color, %32
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %33:i32 = load %i
        %34:i32 = add %33, 1i
        store %i, %34
        next_iteration %b3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    ret %38
  }
}

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