diff --git a/src/runtime/objmodel.cpp b/src/runtime/objmodel.cpp index 286a72e7223aabd5abae5db457fe89752436edb8..ec3a6c79658e5f743a67f3e789fc430b1fa6e24c 100644 --- a/src/runtime/objmodel.cpp +++ b/src/runtime/objmodel.cpp @@ -563,9 +563,13 @@ static Box* _handleClsAttr(Box* obj, Box* attr) { if (attr->cls == member_cls) { BoxedMemberDescriptor* member_desc = static_cast<BoxedMemberDescriptor*>(attr); switch (member_desc->type) { - case BoxedMemberDescriptor::OBJECT: + case BoxedMemberDescriptor::OBJECT: { assert(member_desc->offset % sizeof(Box*) == 0); - return reinterpret_cast<Box**>(obj)[member_desc->offset / sizeof(Box*)]; + Box* rtn = reinterpret_cast<Box**>(obj)[member_desc->offset / sizeof(Box*)]; + // be careful about returning NULLs; I'm not sure what the correct behavior is here: + RELEASE_ASSERT(rtn, ""); + return rtn; + } default: RELEASE_ASSERT(0, "%d", member_desc->type); }