The IcoResult is used to pass back a result when an invocation overflow
occurs. This result returns a struct on 64 bit architectures and
has caused a couple of bugs (c.f. 5044946). It'd be better to use a
mechanism that doesn't react so tightly with the native abi.
Here's a comment from another developer about this issue:
Here is a complaint not about your fix but about the original choices
which forced us to use such a buffer. It is bug-prone to cater to wierd
platform-specific calling sequences like this. There is an excellent
chance that we haven't fixed the last bug pertaining to IcoResult.
It would be much better to use a portable mechanism akin to
Thread::vm_result ('Thread::vm_result_word' vs. 'Thread::vm_result_oop',
perhaps) to handle the occasional extra return word.
Looking at the SCCS logs, it appears the IcoResult convention was
introduced in 1/2000 as part of a 64-bit porting effort, so my complaint
is very tardy.... Better late than never. Should be cleaned up for 1.5++.