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) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %obj:ptr<private, QuicksortObject, read_write> = var
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_32:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>, %x_228:mat3x3<f32>):void {
  $B2: {
    %temp:ptr<function, i32, read_write> = var
    %10:i32 = load %i
    %11:ptr<private, i32, read_write> = access %obj, 0u, %10
    %12:i32 = load %11
    store %temp, %12
    %13:i32 = load %i
    %x_233:i32 = let %13
    %15:ptr<private, i32, read_write> = access %obj, 0u, %x_233
    %16:i32 = load %j
    %17:ptr<private, i32, read_write> = access %obj, 0u, %16
    %18:i32 = load %17
    store %15, %18
    %19:i32 = load %j
    %x_238:i32 = let %19
    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_238
    %22:i32 = load %temp
    store %21, %22
    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
    %33:i32 = load %h
    %34:ptr<private, i32, read_write> = access %obj, 0u, %33
    %35:i32 = load %34
    store %pivot, %35
    %36:i32 = load %l
    %37:i32 = sub %36, 1i
    store %i_1, %37
    %38:i32 = load %l
    store %j_1, %38
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %39:i32 = load %j_1
        %40:i32 = load %h
        %41:i32 = sub %40, 1i
        %42:bool = lte %39, %41
        if %42 [t: $B6, f: $B7] {  # if_1
          $B6: {  # true
            exit_if  # if_1
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %43:i32 = load %j_1
        %44:ptr<private, i32, read_write> = access %obj, 0u, %43
        %45:i32 = load %44
        %46:i32 = load %pivot
        %47:bool = lte %45, %46
        if %47 [t: $B8] {  # if_2
          $B8: {  # true
            %48:i32 = load %i_1
            %49:i32 = add %48, 1i
            store %i_1, %49
            %50:i32 = load %i_1
            store %param, %50
            %51:i32 = load %j_1
            store %param_1, %51
            %52:void = call %swap_i1_i1_, %param, %param_1, mat3x3<f32>(vec3<f32>(0.0f))
            exit_if  # if_2
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %53:i32 = load %j_1
        %54:i32 = add %53, 1i
        store %j_1, %54
        next_iteration  # -> $B4
      }
    }
    %55:i32 = load %i_1
    %56:i32 = add %55, 1i
    store %i_1, %56
    %57:i32 = load %i_1
    store %param_2, %57
    %58:i32 = load %h
    store %param_3, %58
    %59:void = call %swap_i1_i1_, %param_2, %param_3, mat3x3<f32>(vec3<f32>(0.0f))
    %60:i32 = load %i_1
    %x_276:i32 = let %60
    ret %x_276
  }
}
%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
    %70:i32 = load %top
    %71:i32 = add %70, 1i
    %x_279:i32 = let %71
    store %top, %x_279
    %73:ptr<function, i32, read_write> = access %stack, %x_279
    %74:i32 = load %l_1
    store %73, %74
    %75:i32 = load %top
    %76:i32 = add %75, 1i
    %x_283:i32 = let %76
    store %top, %x_283
    %78:ptr<function, i32, read_write> = access %stack, %x_283
    %79:i32 = load %h_1
    store %78, %79
    loop [b: $B10, c: $B11] {  # loop_2
      $B10: {  # body
        %80:i32 = load %top
        %81:bool = gte %80, 0i
        if %81 [t: $B12, f: $B13] {  # if_3
          $B12: {  # true
            exit_if  # if_3
          }
          $B13: {  # false
            exit_loop  # loop_2
          }
        }
        %82:i32 = load %top
        %x_293:i32 = let %82
        %84:i32 = load %top
        %85:i32 = sub %84, 1i
        store %top, %85
        %86:ptr<function, i32, read_write> = access %stack, %x_293
        %87:i32 = load %86
        store %h_1, %87
        %88:i32 = load %top
        %x_297:i32 = let %88
        %90:i32 = load %top
        %91:i32 = sub %90, 1i
        store %top, %91
        %92:ptr<function, i32, read_write> = access %stack, %x_297
        %93:i32 = load %92
        store %l_1, %93
        %94:i32 = load %l_1
        store %param_4, %94
        %95:i32 = load %h_1
        store %param_5, %95
        %96:i32 = call %performPartition_i1_i1_, %param_4, %param_5
        %x_303:i32 = let %96
        store %p, %x_303
        %98:i32 = load %p
        %99:i32 = sub %98, 1i
        %100:i32 = load %l_1
        %101:bool = gt %99, %100
        if %101 [t: $B14] {  # if_4
          $B14: {  # true
            %102:i32 = load %top
            %103:i32 = add %102, 1i
            %x_311:i32 = let %103
            store %top, %x_311
            %105:ptr<function, i32, read_write> = access %stack, %x_311
            %106:i32 = load %l_1
            store %105, %106
            %107:i32 = load %top
            %108:i32 = add %107, 1i
            %x_315:i32 = let %108
            store %top, %x_315
            %110:ptr<function, i32, read_write> = access %stack, %x_315
            %111:i32 = load %p
            %112:i32 = sub %111, 1i
            store %110, %112
            exit_if  # if_4
          }
        }
        %113:i32 = load %p
        %114:i32 = add %113, 1i
        %115:i32 = load %h_1
        %116:bool = lt %114, %115
        if %116 [t: $B15] {  # if_5
          $B15: {  # true
            %117:i32 = load %top
            %118:i32 = add %117, 1i
            %x_326:i32 = let %118
            store %top, %x_326
            %120:ptr<function, i32, read_write> = access %stack, %x_326
            %121:i32 = load %p
            %122:i32 = add %121, 1i
            store %120, %122
            %123:i32 = load %top
            %124:i32 = add %123, 1i
            %x_331:i32 = let %124
            store %top, %x_331
            %126:ptr<function, i32, read_write> = access %stack, %x_331
            %127:i32 = load %h_1
            store %126, %127
            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
    store %i_2, 0i
    loop [b: $B17, c: $B18] {  # loop_3
      $B17: {  # body
        %132:i32 = load %i_2
        %133:bool = lt %132, 10i
        if %133 [t: $B19, f: $B20] {  # if_6
          $B19: {  # true
            exit_if  # if_6
          }
          $B20: {  # false
            exit_loop  # loop_3
          }
        }
        %134:i32 = load %i_2
        %x_92:i32 = let %134
        %136:ptr<private, i32, read_write> = access %obj, 0u, %x_92
        %137:i32 = load %i_2
        %138:i32 = sub 10i, %137
        store %136, %138
        %139:i32 = load %i_2
        %x_96:i32 = let %139
        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_96
        %142:i32 = load %i_2
        %143:ptr<private, i32, read_write> = access %obj, 0u, %142
        %144:i32 = load %143
        %145:i32 = load %i_2
        %146:ptr<private, i32, read_write> = access %obj, 0u, %145
        %147:i32 = load %146
        %148:i32 = mul %144, %147
        store %141, %148
        continue  # -> $B18
      }
      $B18: {  # continuing
        %149:i32 = load %i_2
        %150:i32 = add %149, 1i
        store %i_2, %150
        next_iteration  # -> $B17
      }
    }
    %151:void = call %quicksort_
    %152:vec4<f32> = load %gl_FragCoord
    %153:vec2<f32> = swizzle %152, xy
    %154:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
    %155:vec2<f32> = load %154
    %156:vec2<f32> = div %153, %155
    store %uv, %156
    store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
    %157:f32 = load_vector_element %color, 0u
    %158:f32 = let %157
    %159:ptr<private, i32, read_write> = access %obj, 0u, 0i
    %160:i32 = load %159
    %161:f32 = convert %160
    %162:f32 = add %158, %161
    store_vector_element %color, 0u, %162
    %163:f32 = load_vector_element %uv, 0u
    %164:bool = gt %163, 0.25f
    if %164 [t: $B21] {  # if_7
      $B21: {  # true
        %165:f32 = load_vector_element %color, 0u
        %166:f32 = let %165
        %167:ptr<private, i32, read_write> = access %obj, 0u, 1i
        %168:i32 = load %167
        %169:f32 = convert %168
        %170:f32 = add %166, %169
        store_vector_element %color, 0u, %170
        exit_if  # if_7
      }
    }
    %171:f32 = load_vector_element %uv, 0u
    %172:bool = gt %171, 0.5f
    if %172 [t: $B22] {  # if_8
      $B22: {  # true
        %173:f32 = load_vector_element %color, 1u
        %174:f32 = let %173
        %175:ptr<private, i32, read_write> = access %obj, 0u, 2i
        %176:i32 = load %175
        %177:f32 = convert %176
        %178:f32 = add %174, %177
        store_vector_element %color, 1u, %178
        exit_if  # if_8
      }
    }
    %179:f32 = load_vector_element %uv, 0u
    %180:bool = gt %179, 0.75f
    if %180 [t: $B23] {  # if_9
      $B23: {  # true
        %181:f32 = load_vector_element %color, 2u
        %182:f32 = let %181
        %183:ptr<private, i32, read_write> = access %obj, 0u, 3i
        %184:i32 = load %183
        %185:f32 = convert %184
        %186:f32 = add %182, %185
        store_vector_element %color, 2u, %186
        exit_if  # if_9
      }
    }
    %187:f32 = load_vector_element %color, 1u
    %188:f32 = let %187
    %189:ptr<private, i32, read_write> = access %obj, 0u, 4i
    %190:i32 = load %189
    %191:f32 = convert %190
    %192:f32 = add %188, %191
    store_vector_element %color, 1u, %192
    %193:f32 = load_vector_element %uv, 1u
    %194:bool = gt %193, 0.25f
    if %194 [t: $B24] {  # if_10
      $B24: {  # true
        %195:f32 = load_vector_element %color, 0u
        %196:f32 = let %195
        %197:ptr<private, i32, read_write> = access %obj, 0u, 5i
        %198:i32 = load %197
        %199:f32 = convert %198
        %200:f32 = add %196, %199
        store_vector_element %color, 0u, %200
        exit_if  # if_10
      }
    }
    %201:f32 = load_vector_element %uv, 1u
    %202:bool = gt %201, 0.5f
    if %202 [t: $B25] {  # if_11
      $B25: {  # true
        %203:f32 = load_vector_element %color, 1u
        %204:f32 = let %203
        %205:ptr<private, i32, read_write> = access %obj, 0u, 6i
        %206:i32 = load %205
        %207:f32 = convert %206
        %208:f32 = add %204, %207
        store_vector_element %color, 1u, %208
        exit_if  # if_11
      }
    }
    %209:f32 = load_vector_element %uv, 1u
    %210:bool = gt %209, 0.75f
    if %210 [t: $B26] {  # if_12
      $B26: {  # true
        %211:f32 = load_vector_element %color, 2u
        %212:f32 = let %211
        %213:ptr<private, i32, read_write> = access %obj, 0u, 7i
        %214:i32 = load %213
        %215:f32 = convert %214
        %216:f32 = add %212, %215
        store_vector_element %color, 2u, %216
        exit_if  # if_12
      }
    }
    %217:f32 = load_vector_element %color, 2u
    %218:f32 = let %217
    %219:ptr<private, i32, read_write> = access %obj, 0u, 8i
    %220:i32 = load %219
    %221:f32 = convert %220
    %222:f32 = add %218, %221
    store_vector_element %color, 2u, %222
    %223:f32 = load_vector_element %uv, 0u
    %224:f32 = load_vector_element %uv, 1u
    %225:f32 = sub %223, %224
    %226:f32 = abs %225
    %227:bool = lt %226, 0.25f
    if %227 [t: $B27] {  # if_13
      $B27: {  # true
        %228:f32 = load_vector_element %color, 0u
        %229:f32 = let %228
        %230:ptr<private, i32, read_write> = access %obj, 0u, 9i
        %231:i32 = load %230
        %232:f32 = convert %231
        %233:f32 = add %229, %232
        store_vector_element %color, 0u, %233
        exit_if  # if_13
      }
    }
    %234:vec3<f32> = load %color
    %235:vec3<f32> = normalize %234
    %x_223:vec3<f32> = let %235
    %237:f32 = access %x_223, 0u
    %238:f32 = access %x_223, 1u
    %239:f32 = access %x_223, 2u
    %240:vec4<f32> = construct %237, %238, %239, 1.0f
    store %x_GLF_color, %240
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B28: {
    store %gl_FragCoord, %gl_FragCoord_param
    %243:void = call %main_1
    %244:vec4<f32> = load %x_GLF_color
    %245:main_out = construct %244
    ret %245
  }
}

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