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, 19> @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, array<i32, 17>, read_write> = var
    %r:ptr<function, array<i32, 17>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %ok:ptr<function, bool, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %11:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %13:i32 = load %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %15:i32 = load %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %17:i32 = load %16
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %19:i32 = load %18
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %21:i32 = load %20
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %23:i32 = load %22
    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %25:i32 = load %24
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %27:i32 = load %26
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %29:i32 = load %28
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %31:i32 = load %30
    %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %33:i32 = load %32
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %35:i32 = load %34
    %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %37:i32 = load %36
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %39:i32 = load %38
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %41:i32 = load %40
    %42:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %43:i32 = load %42
    %44:array<i32, 17> = construct %11, %13, %15, %17, %19, %21, %23, %25, %27, %29, %31, %33, %35, %37, %39, %41, %43
    store %A, %44
    %45:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %46:i32 = load %45
    %47:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %48:i32 = load %47
    %49:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %50:i32 = load %49
    %51:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %52:i32 = load %51
    %53:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
    %54:i32 = load %53
    %55:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %56:i32 = load %55
    %57:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
    %58:i32 = load %57
    %59:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %60:i32 = load %59
    %61:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %62:i32 = load %61
    %63:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %64:i32 = load %63
    %65:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %66:i32 = load %65
    %67:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %68:i32 = load %67
    %69:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
    %70:i32 = load %69
    %71:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
    %72:i32 = load %71
    %73:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
    %74:i32 = load %73
    %75:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
    %76:i32 = load %75
    %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %78:i32 = load %77
    %79:array<i32, 17> = construct %46, %48, %50, %52, %54, %56, %58, %60, %62, %64, %66, %68, %70, %72, %74, %76, %78
    store %r, %79
    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %81:i32 = load %80
    store %a, %81
    %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %83:i32 = load %82
    store %i, %83
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %84:i32 = load %i
        %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %86:i32 = load %85
        %87:bool = lt %84, %86
        if %87 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %88:i32 = load %i
        %x_134:i32 = let %88
        %90:i32 = load %a
        %x_135:i32 = let %90
        %92:i32 = load %a
        %93:i32 = sub %92, 1i
        store %a, %93
        %94:ptr<function, i32, read_write> = access %A, %x_134
        store %94, %x_135
        %95:i32 = load %i
        %x_138:i32 = let %95
        %97:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %98:i32 = load %97
        %x_140:i32 = let %98
        %100:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
        %101:i32 = load %100
        %x_142:i32 = let %101
        %103:i32 = max %x_138, %x_140
        %104:i32 = min %103, %x_142
        %105:ptr<function, i32, read_write> = access %A, %104
        %106:i32 = load %i
        %107:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %108:i32 = load %107
        %109:i32 = add %106, %108
        store %105, %109
        continue  # -> $B4
      }
      $B4: {  # continuing
        %110:i32 = load %i
        %111:i32 = add %110, 1i
        store %i, %111
        next_iteration  # -> $B3
      }
    }
    store %ok, true
    %112:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %113:i32 = load %112
    store %i_1, %113
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %114:i32 = load %i_1
        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %116:i32 = load %115
        %117:bool = lt %114, %116
        if %117 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %118:i32 = load %i_1
        %119:ptr<function, i32, read_write> = access %A, %118
        %120:i32 = load %119
        %121:i32 = load %i_1
        %122:ptr<function, i32, read_write> = access %r, %121
        %123:i32 = load %122
        %124:bool = neq %120, %123
        if %124 [t: $B11] {  # if_3
          $B11: {  # true
            store %ok, false
            exit_if  # if_3
          }
        }
        continue  # -> $B8
      }
      $B8: {  # continuing
        %125:i32 = load %i_1
        %126:i32 = add %125, 1i
        store %i_1, %126
        next_iteration  # -> $B7
      }
    }
    %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %128:i32 = load %127
    %129:f32 = convert %128
    %130:vec4<f32> = construct %129
    store %x_GLF_color, %130
    %131:bool = load %ok
    if %131 [t: $B12] {  # if_4
      $B12: {  # true
        %132:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %133:i32 = load %132
        %134:f32 = convert %133
        %135:f32 = let %134
        %136:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %137:i32 = load %136
        %138:f32 = convert %137
        %139:f32 = let %138
        %140:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %141:i32 = load %140
        %142:f32 = convert %141
        %143:f32 = let %142
        %144:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %145:i32 = load %144
        %146:f32 = convert %145
        %147:vec4<f32> = construct %135, %139, %143, %146
        store %x_GLF_color, %147
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %149:void = call %main_1
    %150:vec4<f32> = load %x_GLF_color
    %151:main_out = construct %150
    ret %151
  }
}

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