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

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

%b1 = block {  # root
  %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    store %x_GLF_global_loop_count, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_30:i32 = load %x_GLF_global_loop_count
        %6:bool = lt %x_30, 100i
        if %6 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_33:i32 = load %x_GLF_global_loop_count
        %8:i32 = add %x_33, 1i
        store %x_GLF_global_loop_count, %8
        %x_35:i32 = load %x_GLF_global_loop_count
        %x_36:i32 = load %x_GLF_global_loop_count
        %11:i32 = mul %x_35, %x_36
        %12:bool = gt %11, 10i
        if %12 [t: %b7] {  # if_2
          %b7 = block {  # true
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    %x_41:i32 = load %x_GLF_global_loop_count
    %14:bool = eq %x_41, 4i
    if %14 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_47:i32 = load %15
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_50:i32 = load %17
        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_53:i32 = load %19
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_56:i32 = load %21
        %23:f32 = convert %x_47
        %24:f32 = convert %x_50
        %25:f32 = convert %x_53
        %26:f32 = convert %x_56
        %27:vec4<f32> = construct %23, %24, %25, %26
        store %x_GLF_color, %27
        exit_if  # if_3
      }
      %b9 = block {  # false
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_60:i32 = load %28
        %x_61:f32 = convert %x_60
        %31:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
        store %x_GLF_color, %31
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %33:void = call %main_1
    %34:vec4<f32> = load %x_GLF_color
    %35:main_out = construct %34
    ret %35
  }
}

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