SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(4) {
  a:i32 @offset(0)
  b:i32 @offset(4)
}

%b1 = block {  # root
  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
  %g1:ptr<workgroup, atomic<i32>, read_write> = var
}

%d = func(%val:i32):i32 -> %b2 {
  %b2 = block {
    ret %val
  }
}
%c = func(%val_1:ptr<function, i32, read_write>):i32 -> %b3 {  # %val_1: 'val'
  %b3 = block {
    %7:i32 = load %val_1
    %8:i32 = let %7
    %9:i32 = load %val_1
    %10:i32 = call %d, %9
    %11:i32 = add %8, %10
    ret %11
  }
}
%a = func(%val_2:ptr<function, i32, read_write>):i32 -> %b4 {  # %val_2: 'val'
  %b4 = block {
    %14:i32 = load %val_2
    %15:i32 = let %14
    %16:i32 = call %c, %val_2
    %17:i32 = add %15, %16
    ret %17
  }
}
%z = func():i32 -> %b5 {
  %b5 = block {
    %19:i32 = atomicLoad %g1
    ret %19
  }
}
%y = func(%v1:ptr<function, vec3<f32>, read_write>):i32 -> %b6 {
  %b6 = block {
    %22:vec3<f32> = load %v1
    %23:vec3<f32> = load %v1
    %24:vec3<f32> = cross %22, %23
    %25:f32 = access %24, 0u
    store_vector_element %v1, 0u, %25
    %26:f32 = load_vector_element %v1, 0u
    %27:i32 = call %tint_f32_to_i32, %26
    ret %27
  }
}
%b = func(%val_3:ptr<function, S, read_write>):i32 -> %b7 {  # %val_3: 'val'
  %b7 = block {
    %31:ptr<function, i32, read_write> = access %val_3, 0u
    %32:i32 = load %31
    %33:ptr<function, i32, read_write> = access %val_3, 1u
    %34:i32 = load %33
    %35:i32 = add %32, %34
    ret %35
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b8 {
  %b8 = block {
    %38:bool = eq %tint_local_index, 0u
    if %38 [t: %b9] {  # if_1
      %b9 = block {  # true
        %39:void = atomicStore %g1, 0i
        exit_if  # if_1
      }
    }
    %40:void = msl.threadgroup_barrier 4u
    %v1_1:ptr<function, i32, read_write> = var, 0i  # %v1_1: 'v1'
    %v2:ptr<function, S, read_write> = var, S(0i)
    %v3:ptr<function, S, read_write> = let %v2
    %v4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
    %45:i32 = atomicLoad %g1
    %t1:i32 = let %45
    %47:i32 = call %a, %v1_1
    %48:i32 = let %47
    %49:i32 = call %b, %v2
    %50:i32 = add %48, %49
    %51:i32 = let %50
    %52:i32 = call %b, %v3
    %53:i32 = add %51, %52
    %54:i32 = let %53
    %55:i32 = call %z
    %56:i32 = add %54, %55
    %57:i32 = add %56, %t1
    %58:i32 = let %57
    %59:i32 = call %y, %v4
    %60:i32 = add %58, %59
    store %s, %60
    ret
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 -> %b10 {
  %b10 = block {
    %62:i32 = convert %value
    %63:bool = gte %value, -2147483648.0f
    %64:i32 = select -2147483648i, %62, %63
    %65:bool = lte %value, 2147483520.0f
    %66:i32 = select 2147483647i, %64, %65
    ret %66
  }
}

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