SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: result = struct @align(4) {
  res0:i32 @offset(0)
  res1:i32 @offset(4)
  res2:i32 @offset(8)
}

block0 = struct @align(4) {
  data0:i32 @offset(0)
}

block1 = struct @align(4) {
  data1:i32 @offset(0)
}

block2 = struct @align(4) {
  data2:i32 @offset(0)
}

%b1 = block {  # root
  %x_4:ptr<storage, result, read_write> = var @binding_point(0, 3)
  %x_6:ptr<uniform, block0, read> = var @binding_point(0, 0)
  %x_8:ptr<uniform, block1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, block2, read> = var @binding_point(0, 2)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %6:ptr<storage, i32, read_write> = access %x_4, 0u
    %7:ptr<uniform, i32, read> = access %x_6, 0u
    %8:i32 = load %7
    store %6, %8
    %9:ptr<storage, i32, read_write> = access %x_4, 1u
    %10:ptr<uniform, i32, read> = access %x_8, 0u
    %11:i32 = load %10
    store %9, %11
    %12:ptr<storage, i32, read_write> = access %x_4, 2u
    %13:ptr<uniform, i32, read> = access %x_10, 0u
    %14:i32 = load %13
    store %12, %14
    ret
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
  %b3 = block {
    %16:void = call %main_1
    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.  *
********************************************************************
