SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    store %a, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %a
        %x_29:i32 = let %6
        %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %9:i32 = load %8
        %x_31:i32 = let %9
        %11:bool = gte %x_29, %x_31
        if %11 [t: $B5] {  # if_1
          $B5: {  # true
            exit_loop  # loop_1
          }
        }
        if true [t: $B6] {  # if_2
          $B6: {  # true
            store %continue_execution, false
            exit_if  # if_2
          }
        }
        %12:i32 = load %a
        %x_37:i32 = let %12
        %14:i32 = add %x_37, 1i
        store %a, %14
        continue  # -> $B4
      }
      $B4: {  # continuing
        %15:i32 = load %a
        %x_39:i32 = let %15
        %17:bool = neq %x_39, 1i
        %18:bool = eq %17, false
        break_if %18  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %19:i32 = load %a
    %x_41:i32 = let %19
    %21:bool = eq %x_41, 1i
    if %21 [t: $B7, f: $B8] {  # if_3
      $B7: {  # true
        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %23:i32 = load %22
        %x_47:i32 = let %23
        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %26:i32 = load %25
        %x_50:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %29:i32 = load %28
        %x_53:i32 = let %29
        %31:f32 = convert %x_47
        %32:f32 = let %31
        %33:f32 = convert %x_50
        %34:f32 = let %33
        %35:f32 = convert %x_53
        %36:vec4<f32> = construct 1.0f, %32, %34, %35
        store %x_GLF_color, %36
        exit_if  # if_3
      }
      $B8: {  # false
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %38:i32 = load %37
        %x_57:i32 = let %38
        %40:f32 = convert %x_57
        %x_58:f32 = let %40
        %42:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
        store %x_GLF_color, %42
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %44:void = call %main_1
    %45:vec4<f32> = load %x_GLF_color
    %46:main_out = construct %45
    %47:bool = load %continue_execution
    %48:bool = eq %47, false
    if %48 [t: $B10] {  # if_4
      $B10: {  # true
        terminate_invocation
      }
    }
    ret %46
  }
}

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