ckcallback: Use a CkArrayIndex base class object instead of CkArrayIndexStruct
authorRamprasad Venkataraman <ramv@illinois.edu>
Fri, 22 Apr 2011 20:15:21 +0000 (15:15 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Tue, 31 May 2011 15:18:32 +0000 (10:18 -0500)
commitef040247104a894432dfc5f696f35eaff5aa9e88
tree7b9d8a95f07ec7a59484813e0031e837b23ebde3
parentf14ad0ca9221b590f4176a0d4e647b65d4e03091
ckcallback: Use a CkArrayIndex base class object instead of CkArrayIndexStruct

CkCallback has a union of data based on the different callback types. One of
these if for callbacks that go to array elements. This required storing an
array index in the union with the resulting stipulation that the stored index
object should not have any default constructors.  A CkArrayIndexStruct class
has existed in the codebase expressly for such situations. Because this class
has no relation to the hierarchy of 'normal' array index classes, dangerous
pointer casts have been the norm.

Because of such risky casts, this snippet of code in the callback has been
plagued with heisenbugs over many years, as compilers get stricter and exhibit
greater personality variations across brands and architectures. OpenAtom has
exposed the bugs a couple of times in the last couple of years.

To fix this issue for good (hopefully), the objective is to not cast across
unrelated class hierarchies, but rather make the base class amenable to
participation in a union.  This should help get rid of classes that existed
purely for such silly hacks to enable charm functionality.
src/ck-core/ckcallback.C
src/ck-core/ckcallback.h