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, 3> @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
}

%main_1 = func():void {
  $B2: {
    %c:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %7:i32 = load %6
    %x_27:i32 = let %7
    store %c, %x_27
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %10:i32 = load %9
    %x_29:i32 = let %10
    store %i, %x_29
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %12:i32 = load %i
        %x_34:i32 = let %12
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %15:i32 = load %14
        %x_36:i32 = let %15
        %17:bool = lt %x_34, %x_36
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %i
        %x_39:i32 = let %18
        %20:i32 = complement %x_39
        store %c, %20
        %21:i32 = load %c
        %x_41:i32 = let %21
        %23:i32 = max %x_41, 0i
        %24:i32 = min %23, 3i
        store %c, %24
        continue  # -> $B4
      }
      $B4: {  # continuing
        %25:i32 = load %i
        %x_43:i32 = let %25
        %27:i32 = add %x_43, 1i
        store %i, %27
        next_iteration  # -> $B3
      }
    }
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %29:i32 = load %28
    %x_46:i32 = let %29
    %31:f32 = convert %x_46
    %x_47:f32 = let %31
    %33:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
    store %x_GLF_color, %33
    %34:i32 = load %c
    %x_49:i32 = let %34
    %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %37:i32 = load %36
    %x_51:i32 = let %37
    %39:bool = eq %x_49, %x_51
    if %39 [t: $B7] {  # if_2
      $B7: {  # true
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %41:i32 = load %40
        %x_56:i32 = let %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %44:i32 = load %43
        %x_59:i32 = let %44
        %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %47:i32 = load %46
        %x_62:i32 = let %47
        %49:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %50:i32 = load %49
        %x_65:i32 = let %50
        %52:f32 = convert %x_56
        %53:f32 = let %52
        %54:f32 = convert %x_59
        %55:f32 = let %54
        %56:f32 = convert %x_62
        %57:f32 = let %56
        %58:f32 = convert %x_65
        %59:vec4<f32> = construct %53, %55, %57, %58
        store %x_GLF_color, %59
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}

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