# HG changeset patch # User johnc # Date 1272417227 25200 # Node ID 615a9d95d26511b5e6eb7b9fa0dfc34995c4dd3e # Parent 454ff03c0daf84ce283bc0921fbec36e6bf4bfc2 6946056: assert((intptr_t) sp()<=(intptr_t) result,"result must>=than stack pointer"), frame_x86.cpp:295 Summary: frame::interpreter_frame_monitor_end() will spuriously assert for a frame that spans 0x80000000. Cast values to intptr_t* (rather than intptr_t) so that an unsigned pointer compare is performed. Reviewed-by: never, jcoomes, pbk diff -r 454ff03c0daf -r 615a9d95d265 src/cpu/x86/vm/frame_x86.cpp --- a/src/cpu/x86/vm/frame_x86.cpp Mon Apr 26 18:01:55 2010 -0400 +++ b/src/cpu/x86/vm/frame_x86.cpp Tue Apr 27 18:13:47 2010 -0700 @@ -291,8 +291,8 @@ BasicObjectLock* frame::interpreter_frame_monitor_end() const { BasicObjectLock* result = (BasicObjectLock*) *addr_at(interpreter_frame_monitor_block_top_offset); // make sure the pointer points inside the frame - assert((intptr_t) fp() > (intptr_t) result, "result must < than frame pointer"); - assert((intptr_t) sp() <= (intptr_t) result, "result must >= than stack pointer"); + assert(sp() <= (intptr_t*) result, "monitor end should be above the stack pointer"); + assert((intptr_t*) result < fp(), "monitor end should be strictly below the frame pointer"); return result; }