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

buf1 = struct @align(4) {
  zero:i32 @offset(0)
}

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

$B1: {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %7:i32 = load %6
    %8:f32 = convert %7
    %9:f32 = let %8
    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %11:i32 = load %10
    %12:f32 = convert %11
    %13:f32 = let %12
    %14:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %15:i32 = load %14
    %16:f32 = convert %15
    %17:f32 = let %16
    %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %19:i32 = load %18
    %20:f32 = convert %19
    %21:vec4<f32> = construct %9, %13, %17, %20
    store %x_GLF_color, %21
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %22:ptr<uniform, i32, read> = access %x_7, 0u
        %23:i32 = load %22
        %24:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %25:i32 = load %24
        %26:bool = eq %23, %25
        if %26 [t: $B5] {  # if_1
          $B5: {  # true
            continue  # -> $B4
          }
        }
        %27:ptr<uniform, i32, read> = access %x_7, 0u
        %28:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
        %30:i32 = load %29
        %31:bool = eq %28, %30
        if %31 [t: $B6] {  # if_2
          $B6: {  # true
            exit_loop  # loop_1
          }
        }
        %32:ptr<uniform, i32, read> = access %x_7, 0u
        %33:i32 = load %32
        %34:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
        %35:i32 = load %34
        %36:bool = eq %33, %35
        if %36 [t: $B7] {  # if_3
          $B7: {  # true
            store %continue_execution, false
            exit_if  # if_3
          }
        }
        ret
      }
      $B4: {  # continuing
        break_if true  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %37:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %38:i32 = load %37
    %39:f32 = convert %38
    %40:vec4<f32> = construct %39
    store %x_GLF_color, %40
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %42:void = call %main_1
    %43:vec4<f32> = load %x_GLF_color
    %44:main_out = construct %43
    %45:bool = load %continue_execution
    %46:bool = eq %45, false
    if %46 [t: $B9] {  # if_4
      $B9: {  # true
        terminate_invocation
      }
    }
    ret %44
  }
}

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