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, 5> @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
    %i:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<i32, 2>, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %11:i32 = load %10
    %x_36:i32 = let %11
    store %a, %x_36
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %14:i32 = load %13
    %x_38:i32 = let %14
    store %b, %x_38
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %17:i32 = load %16
    %x_40:i32 = let %17
    %19:f32 = convert %x_40
    %x_41:f32 = let %19
    %21:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
    store %x_GLF_color, %21
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %23:i32 = load %22
    %x_44:i32 = let %23
    store %i, %x_44
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %25:i32 = load %i
        %x_49:i32 = let %25
        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %28:i32 = load %27
        %x_51:i32 = let %28
        %30:bool = lt %x_49, %x_51
        if %30 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %31:i32 = load %i
        %x_54:i32 = let %31
        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %34:i32 = load %33
        %x_56:i32 = let %34
        %36:bool = gt %x_54, %x_56
        if %36 [t: $B7] {  # if_2
          $B7: {  # true
            %37:i32 = load %a
            %x_60:i32 = let %37
            %39:i32 = add %x_60, 1i
            store %a, %39
            if false [t: $B8] {  # if_3
              $B8: {  # true
                %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                %41:i32 = load %40
                %x_65:i32 = let %41
                store %i_1, %x_65
                loop [b: $B9] {  # loop_2
                  $B9: {  # body
                    %43:i32 = load %i_1
                    %x_70:i32 = let %43
                    %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
                    %46:i32 = load %45
                    %x_72:i32 = let %46
                    %48:bool = lt %x_70, %x_72
                    if %48 [t: $B10, f: $B11] {  # if_4
                      $B10: {  # true
                        exit_if  # if_4
                      }
                      $B11: {  # false
                        exit_loop  # loop_2
                      }
                    }
                    ret
                  }
                }
                exit_if  # if_3
              }
            }
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %49:i32 = load %i
        %x_75:i32 = let %49
        %51:i32 = add %x_75, 1i
        store %i, %51
        next_iteration  # -> $B3
      }
    }
    %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %53:i32 = load %52
    %x_78:i32 = let %53
    store %i_2, %x_78
    loop [b: $B12, c: $B13] {  # loop_3
      $B12: {  # body
        %55:i32 = load %i_2
        %x_83:i32 = let %55
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %58:i32 = load %57
        %x_85:i32 = let %58
        %60:bool = lt %x_83, %x_85
        if %60 [t: $B14, f: $B15] {  # if_5
          $B14: {  # true
            exit_if  # if_5
          }
          $B15: {  # false
            exit_loop  # loop_3
          }
        }
        %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %62:i32 = load %61
        %x_89:i32 = let %62
        %64:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %65:i32 = load %64
        %x_91:i32 = let %65
        %67:i32 = load %b
        %x_93:i32 = let %67
        %69:array<i32, 2> = construct %x_89, %x_91
        store %indexable, %69
        %70:ptr<function, i32, read_write> = access %indexable, %x_93
        %71:i32 = load %70
        %x_95:i32 = let %71
        %73:i32 = load %a
        %x_96:i32 = let %73
        %75:i32 = add %x_96, %x_95
        store %a, %75
        continue  # -> $B13
      }
      $B13: {  # continuing
        %76:i32 = load %i_2
        %x_98:i32 = let %76
        %78:i32 = add %x_98, 1i
        store %i_2, %78
        next_iteration  # -> $B12
      }
    }
    %79:i32 = load %a
    %x_100:i32 = let %79
    %81:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %82:i32 = load %81
    %x_102:i32 = let %82
    %84:bool = eq %x_100, %x_102
    if %84 [t: $B16] {  # if_6
      $B16: {  # true
        %85:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %86:i32 = load %85
        %x_107:i32 = let %86
        %88:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %89:i32 = load %88
        %x_110:i32 = let %89
        %91:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %92:i32 = load %91
        %x_113:i32 = let %92
        %94:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %95:i32 = load %94
        %x_116:i32 = let %95
        %97:f32 = convert %x_107
        %98:f32 = let %97
        %99:f32 = convert %x_110
        %100:f32 = let %99
        %101:f32 = convert %x_113
        %102:f32 = let %101
        %103:f32 = convert %x_116
        %104:vec4<f32> = construct %98, %100, %102, %103
        store %x_GLF_color, %104
        exit_if  # if_6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B17: {
    %106:void = call %main_1
    %107:vec4<f32> = load %x_GLF_color
    %108:main_out = construct %107
    ret %108
  }
}

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