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: {
    %a: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_26:i32 = let %7
    store %a, %x_26
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %10:i32 = load %9
    %x_28:i32 = let %10
    store %i, %x_28
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %12:i32 = load %i
        %x_33:i32 = let %12
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %15:i32 = load %14
        %x_35:i32 = let %15
        %17:bool = lt %x_33, %x_35
        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_38:i32 = let %18
        switch %x_38 [c: (0i -1i, $B7), c: (default, $B8)] {  # switch_1
          $B7: {  # case
            %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %21:i32 = load %20
            %x_42:i32 = let %21
            store %a, %x_42
            exit_switch  # switch_1
          }
          $B8: {  # case
            exit_switch  # switch_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %23:i32 = load %i
        %x_43:i32 = let %23
        %25:i32 = add %x_43, 1i
        store %i, %25
        next_iteration  # -> $B3
      }
    }
    %26:i32 = load %a
    %x_45:i32 = let %26
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %29:i32 = load %28
    %x_47:i32 = let %29
    %31:bool = eq %x_45, %x_47
    if %31 [t: $B9, f: $B10] {  # if_2
      $B9: {  # true
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %33:i32 = load %32
        %x_53:i32 = let %33
        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %36:i32 = load %35
        %x_56:i32 = let %36
        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %39:i32 = load %38
        %x_59:i32 = let %39
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %42:i32 = load %41
        %x_62:i32 = let %42
        %44:f32 = convert %x_53
        %45:f32 = let %44
        %46:f32 = convert %x_56
        %47:f32 = let %46
        %48:f32 = convert %x_59
        %49:f32 = let %48
        %50:f32 = convert %x_62
        %51:vec4<f32> = construct %45, %47, %49, %50
        store %x_GLF_color, %51
        exit_if  # if_2
      }
      $B10: {  # false
        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %53:i32 = load %52
        %x_66:i32 = let %53
        %55:f32 = convert %x_66
        %x_67:f32 = let %55
        %57:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
        store %x_GLF_color, %57
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %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.  *
********************************************************************
