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

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