SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
  numbers:array<i32, 10> @offset(0)
}

buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

buf1 = struct @align(8) {
  resolution:vec2<f32> @offset(0)
}

main_out = struct @align(16) {
  frag_color_1:vec4<f32> @offset(0), @location(0)
  gl_Position:vec4<f32> @offset(16), @builtin(position)
}

$B1: {  # root
  %obj:ptr<private, QuicksortObject, read_write> = var
  %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
  %x_33:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_36:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %frag_color:ptr<private, vec4<f32>, read_write> = var
  %gl_Position:ptr<private, vec4<f32>, read_write> = var
}

%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
  $B2: {
    %temp:ptr<function, i32, read_write> = var
    %12:i32 = load %i
    %13:ptr<private, i32, read_write> = access %obj, 0u, %12
    %14:i32 = load %13
    store %temp, %14
    %15:i32 = load %i
    %x_253:i32 = let %15
    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_253
    %18:i32 = load %j
    %19:ptr<private, i32, read_write> = access %obj, 0u, %18
    %20:i32 = load %19
    store %17, %20
    %21:i32 = load %j
    %x_258:i32 = let %21
    %23:ptr<private, i32, read_write> = access %obj, 0u, %x_258
    %24:i32 = load %temp
    store %23, %24
    ret
  }
}
%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
  $B3: {
    %pivot:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %j_1:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, i32, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    %35:i32 = load %h
    %36:ptr<private, i32, read_write> = access %obj, 0u, %35
    %37:i32 = load %36
    store %pivot, %37
    %38:i32 = load %l
    %39:i32 = sub %38, 1i
    store %i_1, %39
    %40:i32 = load %l
    store %j_1, %40
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %41:i32 = load %j_1
        %42:i32 = load %h
        %43:i32 = sub %42, 1i
        %44:bool = lte %41, %43
        if %44 [t: $B6, f: $B7] {  # if_1
          $B6: {  # true
            exit_if  # if_1
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %45:i32 = load %j_1
        %46:ptr<private, i32, read_write> = access %obj, 0u, %45
        %47:i32 = load %46
        %48:i32 = load %pivot
        %49:bool = lte %47, %48
        if %49 [t: $B8] {  # if_2
          $B8: {  # true
            %50:i32 = load %i_1
            %51:i32 = add %50, 1i
            store %i_1, %51
            %52:i32 = load %i_1
            store %param, %52
            %53:i32 = load %j_1
            store %param_1, %53
            %54:void = call %swap_i1_i1_, %param, %param_1
            exit_if  # if_2
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %55:i32 = load %j_1
        %56:i32 = add %55, 1i
        store %j_1, %56
        next_iteration  # -> $B4
      }
    }
    %57:i32 = load %i_1
    %58:i32 = add %57, 1i
    store %param_2, %58
    %59:i32 = load %h
    store %param_3, %59
    %60:void = call %swap_i1_i1_, %param_2, %param_3
    %61:i32 = load %i_1
    %x_295:i32 = let %61
    %63:i32 = add %x_295, 1i
    ret %63
  }
}
%quicksort_ = func():void {
  $B9: {
    %l_1:ptr<function, i32, read_write> = var
    %h_1:ptr<function, i32, read_write> = var
    %top:ptr<function, i32, read_write> = var
    %stack:ptr<function, array<i32, 10>, read_write> = var
    %p:ptr<function, i32, read_write> = var
    %param_4:ptr<function, i32, read_write> = var
    %param_5:ptr<function, i32, read_write> = var
    store %l_1, 0i
    store %h_1, 9i
    store %top, -1i
    %72:i32 = load %top
    %73:i32 = add %72, 1i
    %x_299:i32 = let %73
    store %top, %x_299
    %75:ptr<function, i32, read_write> = access %stack, %x_299
    %76:i32 = load %l_1
    store %75, %76
    %77:i32 = load %top
    %78:i32 = add %77, 1i
    %x_303:i32 = let %78
    store %top, %x_303
    %80:ptr<function, i32, read_write> = access %stack, %x_303
    %81:i32 = load %h_1
    store %80, %81
    loop [b: $B10, c: $B11] {  # loop_2
      $B10: {  # body
        %82:i32 = load %top
        %83:bool = gte %82, 0i
        if %83 [t: $B12, f: $B13] {  # if_3
          $B12: {  # true
            exit_if  # if_3
          }
          $B13: {  # false
            exit_loop  # loop_2
          }
        }
        %84:i32 = load %top
        %x_313:i32 = let %84
        %86:i32 = load %top
        %87:i32 = sub %86, 1i
        store %top, %87
        %88:ptr<function, i32, read_write> = access %stack, %x_313
        %89:i32 = load %88
        store %h_1, %89
        %90:i32 = load %top
        %x_317:i32 = let %90
        %92:i32 = load %top
        %93:i32 = sub %92, 1i
        store %top, %93
        %94:ptr<function, i32, read_write> = access %stack, %x_317
        %95:i32 = load %94
        store %l_1, %95
        %96:i32 = load %l_1
        store %param_4, %96
        %97:i32 = load %h_1
        store %param_5, %97
        %98:i32 = call %performPartition_i1_i1_, %param_4, %param_5
        %x_323:i32 = let %98
        store %p, %x_323
        %100:i32 = load %p
        %101:i32 = sub %100, 1i
        %102:i32 = load %l_1
        %103:bool = gt %101, %102
        if %103 [t: $B14] {  # if_4
          $B14: {  # true
            %104:i32 = load %top
            %105:i32 = add %104, 1i
            %x_331:i32 = let %105
            store %top, %x_331
            %107:ptr<function, i32, read_write> = access %stack, %x_331
            %108:i32 = load %l_1
            store %107, %108
            %109:i32 = load %top
            %110:i32 = add %109, 1i
            %x_335:i32 = let %110
            store %top, %x_335
            %112:ptr<function, i32, read_write> = access %stack, %x_335
            %113:i32 = load %p
            %114:i32 = sub %113, 1i
            store %112, %114
            exit_if  # if_4
          }
        }
        %115:i32 = load %p
        %116:i32 = add %115, 1i
        %117:i32 = load %h_1
        %118:bool = lt %116, %117
        if %118 [t: $B15] {  # if_5
          $B15: {  # true
            %119:i32 = load %top
            %120:i32 = add %119, 1i
            %x_346:i32 = let %120
            store %top, %x_346
            %122:ptr<function, i32, read_write> = access %stack, %x_346
            %123:i32 = load %p
            %124:i32 = add %123, 1i
            store %122, %124
            %125:i32 = load %top
            %126:i32 = add %125, 1i
            %x_351:i32 = let %126
            store %top, %x_351
            %128:ptr<function, i32, read_write> = access %stack, %x_351
            %129:i32 = load %h_1
            store %128, %129
            exit_if  # if_5
          }
        }
        continue  # -> $B11
      }
      $B11: {  # continuing
        next_iteration  # -> $B10
      }
    }
    ret
  }
}
%main_1 = func():void {
  $B16: {
    %i_2:ptr<function, i32, read_write> = var
    %uv:ptr<function, vec2<f32>, read_write> = var
    %color:ptr<function, vec3<f32>, read_write> = var
    %134:vec4<f32> = load %x_GLF_pos
    %135:vec4<f32> = add %134, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
    %136:vec4<f32> = mul %135, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
    store %x_GLF_FragCoord, %136
    store %i_2, 0i
    loop [b: $B17, c: $B18] {  # loop_3
      $B17: {  # body
        %137:i32 = load %i_2
        %138:bool = lt %137, 10i
        if %138 [t: $B19, f: $B20] {  # if_6
          $B19: {  # true
            exit_if  # if_6
          }
          $B20: {  # false
            exit_loop  # loop_3
          }
        }
        %139:i32 = load %i_2
        %x_104:i32 = let %139
        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_104
        %142:i32 = load %i_2
        %143:i32 = sub 10i, %142
        store %141, %143
        %144:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
        %145:f32 = load_vector_element %144, 0u
        %146:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
        %147:f32 = load_vector_element %146, 1u
        %148:bool = gt %145, %147
        if %148 [t: $B21] {  # if_7
          $B21: {  # true
            exit_loop  # loop_3
          }
        }
        %149:i32 = load %i_2
        %x_115:i32 = let %149
        %151:ptr<private, i32, read_write> = access %obj, 0u, %x_115
        %152:i32 = load %i_2
        %153:ptr<private, i32, read_write> = access %obj, 0u, %152
        %154:i32 = load %153
        %155:i32 = load %i_2
        %156:ptr<private, i32, read_write> = access %obj, 0u, %155
        %157:i32 = load %156
        %158:i32 = mul %154, %157
        store %151, %158
        continue  # -> $B18
      }
      $B18: {  # continuing
        %159:i32 = load %i_2
        %160:i32 = add %159, 1i
        store %i_2, %160
        next_iteration  # -> $B17
      }
    }
    %161:void = call %quicksort_
    %162:vec4<f32> = load %x_GLF_FragCoord
    %163:vec2<f32> = swizzle %162, xy
    %164:ptr<uniform, vec2<f32>, read> = access %x_36, 0u
    %165:vec2<f32> = load %164
    %166:vec2<f32> = div %163, %165
    store %uv, %166
    store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
    %167:f32 = load_vector_element %color, 0u
    %168:f32 = let %167
    %169:ptr<private, i32, read_write> = access %obj, 0u, 0i
    %170:i32 = load %169
    %171:f32 = convert %170
    %172:f32 = add %168, %171
    store_vector_element %color, 0u, %172
    %173:f32 = load_vector_element %uv, 0u
    %174:bool = gt %173, 0.25f
    if %174 [t: $B22] {  # if_8
      $B22: {  # true
        %175:f32 = load_vector_element %color, 0u
        %176:f32 = let %175
        %177:ptr<private, i32, read_write> = access %obj, 0u, 1i
        %178:i32 = load %177
        %179:f32 = convert %178
        %180:f32 = add %176, %179
        store_vector_element %color, 0u, %180
        exit_if  # if_8
      }
    }
    %181:f32 = load_vector_element %uv, 0u
    %182:bool = gt %181, 0.5f
    if %182 [t: $B23] {  # if_9
      $B23: {  # true
        %183:f32 = load_vector_element %color, 1u
        %184:f32 = let %183
        %185:ptr<private, i32, read_write> = access %obj, 0u, 2i
        %186:i32 = load %185
        %187:f32 = convert %186
        %188:f32 = add %184, %187
        store_vector_element %color, 1u, %188
        exit_if  # if_9
      }
    }
    %189:f32 = load_vector_element %uv, 0u
    %190:bool = gt %189, 0.75f
    if %190 [t: $B24] {  # if_10
      $B24: {  # true
        %191:f32 = load_vector_element %color, 2u
        %192:f32 = let %191
        %193:ptr<private, i32, read_write> = access %obj, 0u, 3i
        %194:i32 = load %193
        %195:f32 = convert %194
        %196:f32 = add %192, %195
        store_vector_element %color, 2u, %196
        exit_if  # if_10
      }
    }
    %197:f32 = load_vector_element %color, 1u
    %198:f32 = let %197
    %199:ptr<private, i32, read_write> = access %obj, 0u, 4i
    %200:i32 = load %199
    %201:f32 = convert %200
    %202:f32 = add %198, %201
    store_vector_element %color, 1u, %202
    %203:f32 = load_vector_element %uv, 1u
    %204:bool = gt %203, 0.25f
    if %204 [t: $B25] {  # if_11
      $B25: {  # true
        %205:f32 = load_vector_element %color, 0u
        %206:f32 = let %205
        %207:ptr<private, i32, read_write> = access %obj, 0u, 5i
        %208:i32 = load %207
        %209:f32 = convert %208
        %210:f32 = add %206, %209
        store_vector_element %color, 0u, %210
        exit_if  # if_11
      }
    }
    %211:f32 = load_vector_element %uv, 1u
    %212:bool = gt %211, 0.5f
    if %212 [t: $B26] {  # if_12
      $B26: {  # true
        %213:f32 = load_vector_element %color, 1u
        %214:f32 = let %213
        %215:ptr<private, i32, read_write> = access %obj, 0u, 6i
        %216:i32 = load %215
        %217:f32 = convert %216
        %218:f32 = add %214, %217
        store_vector_element %color, 1u, %218
        exit_if  # if_12
      }
    }
    %219:f32 = load_vector_element %uv, 1u
    %220:bool = gt %219, 0.75f
    if %220 [t: $B27] {  # if_13
      $B27: {  # true
        %221:f32 = load_vector_element %color, 2u
        %222:f32 = let %221
        %223:ptr<private, i32, read_write> = access %obj, 0u, 7i
        %224:i32 = load %223
        %225:f32 = convert %224
        %226:f32 = add %222, %225
        store_vector_element %color, 2u, %226
        exit_if  # if_13
      }
    }
    %227:f32 = load_vector_element %color, 2u
    %228:f32 = let %227
    %229:ptr<private, i32, read_write> = access %obj, 0u, 8i
    %230:i32 = load %229
    %231:f32 = convert %230
    %232:f32 = add %228, %231
    store_vector_element %color, 2u, %232
    %233:f32 = load_vector_element %uv, 0u
    %234:f32 = load_vector_element %uv, 1u
    %235:f32 = sub %233, %234
    %236:f32 = abs %235
    %237:bool = lt %236, 0.25f
    if %237 [t: $B28] {  # if_14
      $B28: {  # true
        %238:f32 = load_vector_element %color, 0u
        %239:f32 = let %238
        %240:ptr<private, i32, read_write> = access %obj, 0u, 9i
        %241:i32 = load %240
        %242:f32 = convert %241
        %243:f32 = add %239, %242
        store_vector_element %color, 0u, %243
        exit_if  # if_14
      }
    }
    %244:vec3<f32> = load %color
    %245:vec3<f32> = normalize %244
    %x_242:vec3<f32> = let %245
    %247:f32 = access %x_242, 0u
    %248:f32 = access %x_242, 1u
    %249:f32 = access %x_242, 2u
    %250:vec4<f32> = construct %247, %248, %249, 1.0f
    store %frag_color, %250
    %251:vec4<f32> = load %x_GLF_pos
    store %gl_Position, %251
    ret
  }
}
%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
  $B29: {
    store %x_GLF_pos, %x_GLF_pos_param
    %254:void = call %main_1
    %255:vec4<f32> = load %frag_color
    %256:vec4<f32> = load %gl_Position
    %257:main_out = construct %255, %256
    ret %257
  }
}

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