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, 20> @offset(0)
}

buf1 = struct @align(4) {
  one:i32 @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
  %x_19:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void {
  $B2: {
    %arr0:ptr<function, array<i32, 10>, read_write> = var
    %arr1:ptr<function, array<i32, 10>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %limiter0:ptr<function, i32, read_write> = var
    %limiter1:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %limiter2:ptr<function, i32, read_write> = var
    %limiter3:ptr<function, i32, read_write> = var
    %d:ptr<function, i32, read_write> = var
    %ref0:ptr<function, array<i32, 10>, read_write> = var
    %ref1:ptr<function, array<i32, 10>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %17:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %18:i32 = load %17
    %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %20:i32 = load %19
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %22:i32 = load %21
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %24:i32 = load %23
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %26:i32 = load %25
    %27:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
    %28:i32 = load %27
    %29:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %30:i32 = load %29
    %31:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
    %32:i32 = load %31
    %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %34:i32 = load %33
    %35:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %36:i32 = load %35
    %37:array<i32, 10> = construct %18, %20, %22, %24, %26, %28, %30, %32, %34, %36
    store %arr0, %37
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %39:i32 = load %38
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %41:i32 = load %40
    %42:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
    %43:i32 = load %42
    %44:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
    %45:i32 = load %44
    %46:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
    %47:i32 = load %46
    %48:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %49:i32 = load %48
    %50:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %51:i32 = load %50
    %52:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %53:i32 = load %52
    %54:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
    %55:i32 = load %54
    %56:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
    %57:i32 = load %56
    %58:array<i32, 10> = construct %39, %41, %43, %45, %47, %49, %51, %53, %55, %57
    store %arr1, %58
    %59:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %60:i32 = load %59
    store %a, %60
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %61:i32 = load %a
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %63:i32 = load %62
        %64:bool = lt %61, %63
        if %64 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %65:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %66:i32 = load %65
        store %limiter0, %66
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %67:i32 = load %limiter0
            %68:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
            %69:i32 = load %68
            %70:bool = lt %67, %69
            if %70 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %71:i32 = load %limiter0
            %72:i32 = add %71, 1i
            store %limiter0, %72
            %73:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
            %74:i32 = load %73
            store %limiter1, %74
            %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %76:i32 = load %75
            store %b, %76
            loop [b: $B11, c: $B12] {  # loop_3
              $B11: {  # body
                %77:i32 = load %b
                %78:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %79:i32 = load %78
                %80:bool = lt %77, %79
                if %80 [t: $B13, f: $B14] {  # if_3
                  $B13: {  # true
                    exit_if  # if_3
                  }
                  $B14: {  # false
                    exit_loop  # loop_3
                  }
                }
                %81:i32 = load %limiter1
                %82:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
                %83:i32 = load %82
                %84:bool = gt %81, %83
                if %84 [t: $B15] {  # if_4
                  $B15: {  # true
                    exit_loop  # loop_3
                  }
                }
                %85:i32 = load %limiter1
                %86:i32 = add %85, 1i
                store %limiter1, %86
                %87:i32 = load %b
                %x_145:i32 = let %87
                %89:ptr<function, i32, read_write> = access %arr0, %x_145
                %90:i32 = load %a
                %91:ptr<function, i32, read_write> = access %arr1, %90
                %92:i32 = load %91
                store %89, %92
                continue  # -> $B12
              }
              $B12: {  # continuing
                %93:i32 = load %b
                %94:i32 = add %93, 1i
                store %b, %94
                next_iteration  # -> $B11
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            next_iteration  # -> $B7
          }
        }
        store %limiter2, 0i
        loop [b: $B16, c: $B17] {  # loop_4
          $B16: {  # body
            %95:i32 = load %limiter2
            %96:bool = lt %95, 5i
            if %96 [t: $B18, f: $B19] {  # if_5
              $B18: {  # true
                exit_if  # if_5
              }
              $B19: {  # false
                exit_loop  # loop_4
              }
            }
            %97:i32 = load %limiter2
            %98:i32 = add %97, 1i
            store %limiter2, %98
            %99:ptr<function, i32, read_write> = access %arr0, 1i
            %100:ptr<function, i32, read_write> = access %arr1, 1i
            %101:i32 = load %100
            store %99, %101
            continue  # -> $B17
          }
          $B17: {  # continuing
            next_iteration  # -> $B16
          }
        }
        loop [b: $B20, c: $B21] {  # loop_5
          $B20: {  # body
            store %limiter3, 0i
            store %d, 0i
            loop [b: $B22, c: $B23] {  # loop_6
              $B22: {  # body
                %102:i32 = load %d
                %103:bool = lt %102, 10i
                if %103 [t: $B24, f: $B25] {  # if_6
                  $B24: {  # true
                    exit_if  # if_6
                  }
                  $B25: {  # false
                    exit_loop  # loop_6
                  }
                }
                %104:i32 = load %limiter3
                %105:bool = gt %104, 4i
                if %105 [t: $B26] {  # if_7
                  $B26: {  # true
                    exit_loop  # loop_6
                  }
                }
                %106:i32 = load %limiter3
                %107:i32 = add %106, 1i
                store %limiter3, %107
                %108:i32 = load %d
                %x_181:i32 = let %108
                %110:ptr<function, i32, read_write> = access %arr1, %x_181
                %111:i32 = load %d
                %112:ptr<function, i32, read_write> = access %arr0, %111
                %113:i32 = load %112
                store %110, %113
                continue  # -> $B23
              }
              $B23: {  # continuing
                %114:i32 = load %d
                %115:i32 = add %114, 1i
                store %d, %115
                next_iteration  # -> $B22
              }
            }
            continue  # -> $B21
          }
          $B21: {  # continuing
            %116:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
            %117:i32 = load %116
            %x_189:i32 = let %117
            %119:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %120:i32 = load %119
            %x_191:i32 = let %120
            %122:bool = eq %x_189, %x_191
            %123:bool = eq %122, false
            break_if %123  # -> [t: exit_loop loop_5, f: $B20]
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %124:i32 = load %a
        %125:i32 = add %124, 1i
        store %a, %125
        next_iteration  # -> $B3
      }
    }
    %126:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %127:i32 = load %126
    %128:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %129:i32 = load %128
    %130:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %131:i32 = load %130
    %132:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %133:i32 = load %132
    %134:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %135:i32 = load %134
    %136:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
    %137:i32 = load %136
    %138:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %139:i32 = load %138
    %140:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
    %141:i32 = load %140
    %142:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %143:i32 = load %142
    %144:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %145:i32 = load %144
    %146:array<i32, 10> = construct %127, %129, %131, %133, %135, %137, %139, %141, %143, %145
    store %ref0, %146
    %147:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %148:i32 = load %147
    %149:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %150:i32 = load %149
    %151:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %152:i32 = load %151
    %153:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %154:i32 = load %153
    %155:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %156:i32 = load %155
    %157:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %158:i32 = load %157
    %159:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %160:i32 = load %159
    %161:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %162:i32 = load %161
    %163:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
    %164:i32 = load %163
    %165:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
    %166:i32 = load %165
    %167:array<i32, 10> = construct %148, %150, %152, %154, %156, %158, %160, %162, %164, %166
    store %ref1, %167
    %168:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %169:i32 = load %168
    %170:f32 = convert %169
    %171:f32 = let %170
    %172:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %173:i32 = load %172
    %174:f32 = convert %173
    %175:f32 = let %174
    %176:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %177:i32 = load %176
    %178:f32 = convert %177
    %179:f32 = let %178
    %180:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %181:i32 = load %180
    %182:f32 = convert %181
    %183:vec4<f32> = construct %171, %175, %179, %182
    store %x_GLF_color, %183
    %184:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %185:i32 = load %184
    store %i, %185
    loop [b: $B27, c: $B28] {  # loop_7
      $B27: {  # body
        %x_277:ptr<function, bool, read_write> = var
        %x_278:ptr<function, bool, read_write> = var
        %188:i32 = load %i
        %189:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %190:i32 = load %189
        %191:bool = lt %188, %190
        if %191 [t: $B29, f: $B30] {  # if_8
          $B29: {  # true
            exit_if  # if_8
          }
          $B30: {  # false
            exit_loop  # loop_7
          }
        }
        %192:i32 = load %i
        %193:ptr<function, i32, read_write> = access %arr0, %192
        %194:i32 = load %193
        %195:i32 = load %i
        %196:ptr<function, i32, read_write> = access %ref0, %195
        %197:i32 = load %196
        %198:bool = neq %194, %197
        %x_267:bool = let %198
        store %x_278, %x_267
        %200:bool = eq %x_267, false
        if %200 [t: $B31] {  # if_9
          $B31: {  # true
            %201:i32 = load %i
            %202:ptr<function, i32, read_write> = access %arr1, %201
            %203:i32 = load %202
            %204:i32 = load %i
            %205:ptr<function, i32, read_write> = access %ref1, %204
            %206:i32 = load %205
            %207:bool = neq %203, %206
            store %x_277, %207
            %208:bool = load %x_277
            store %x_278, %208
            exit_if  # if_9
          }
        }
        %209:bool = load %x_278
        if %209 [t: $B32] {  # if_10
          $B32: {  # true
            %210:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %211:i32 = load %210
            %212:f32 = convert %211
            %213:vec4<f32> = construct %212
            store %x_GLF_color, %213
            exit_if  # if_10
          }
        }
        continue  # -> $B28
      }
      $B28: {  # continuing
        %214:i32 = load %i
        %215:i32 = add %214, 1i
        store %i, %215
        next_iteration  # -> $B27
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B33: {
    %217:void = call %main_1
    %218:vec4<f32> = load %x_GLF_color
    %219:main_out = construct %218
    ret %219
  }
}

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