SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
  %p:ptr<private, f32, read_write> = var
  %w:ptr<workgroup, f32, read_write> = var
  %uniforms:ptr<storage, vec2<f32>, read> = var @binding_point(0, 1)
  %storages:ptr<storage, array<f32>, read_write> = var @binding_point(0, 0)
}

%no_uses = func():void {
  $B2: {
    ret
  }
}
%zoo = func():void {
  $B3: {
    %7:f32 = load %p
    %8:f32 = mul %7, 2.0f
    store %p, %8
    ret
  }
}
%bar = func(%a:f32, %b:f32):void {
  $B4: {
    store %p, %a
    store %w, %b
    %12:ptr<storage, f32, read_write> = access %storages, 0i
    %13:f32 = load_vector_element %uniforms, 0u
    store %12, %13
    %14:void = call %zoo
    ret
  }
}
%foo = func(%a_1:f32):void {  # %a_1: 'a'
  $B5: {
    %b_1:f32 = let 2.0f  # %b_1: 'b'
    %18:void = call %bar, %a_1, %b_1
    %19:void = call %no_uses
    ret
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
  $B6: {
    %22:bool = eq %tint_local_index, 0u
    if %22 [t: $B7] {  # if_1
      $B7: {  # true
        store %w, 0.0f
        exit_if  # if_1
      }
    }
    %23:void = msl.threadgroup_barrier 4u
    %24:void = call %foo, 1.0f
    ret
  }
}

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