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)
}

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: {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %x_65:ptr<function, bool, read_write> = var
    %x_66:ptr<function, bool, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %10:i32 = load %9
    store %a, %10
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %12:i32 = load %11
    store %b, %12
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %14:i32 = load %13
    store %c, %14
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %15:i32 = load %a
        %16:i32 = load %b
        %17:bool = lt %15, %16
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %a
        %19:i32 = add %18, 1i
        store %a, %19
        %20:i32 = load %c
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %22:i32 = load %21
        %23:bool = eq %20, %22
        if %23 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %24:i32 = load %c
            %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %26:i32 = load %25
            %27:i32 = mul %24, %26
            store %c, %27
            exit_if  # if_2
          }
          $B8: {  # false
            if true [t: $B9] {  # if_3
              $B9: {  # true
                continue  # -> $B4
              }
            }
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %28:i32 = load %a
    %29:i32 = load %b
    %30:bool = eq %28, %29
    %x_59:bool = let %30
    store %x_66, %x_59
    if %x_59 [t: $B10] {  # if_4
      $B10: {  # true
        %32:i32 = load %c
        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %34:i32 = load %33
        %35:bool = eq %32, %34
        store %x_65, %35
        %36:bool = load %x_65
        store %x_66, %36
        exit_if  # if_4
      }
    }
    %37:bool = load %x_66
    if %37 [t: $B11, f: $B12] {  # if_5
      $B11: {  # true
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:f32 = let %40
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:f32 = let %44
        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %47:i32 = load %46
        %48:f32 = convert %47
        %49:f32 = let %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:vec4<f32> = construct %41, %45, %49, %52
        store %x_GLF_color, %53
        exit_if  # if_5
      }
      $B12: {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:vec4<f32> = construct %56
        store %x_GLF_color, %57
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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