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

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