# HG changeset patch # User never # Date 1251177975 25200 # Node ID 22b55d147bc195250155ae907b05b2344fd152fd # Parent 7530897778c560c0208a5b27ea58ba97c5e3b3ab 6875329: fix for 6795465 broke exception handler cloning Reviewed-by: kvn diff -r 7530897778c5 -r 22b55d147bc1 hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Mon Aug 24 11:13:46 2009 -0700 +++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Mon Aug 24 22:26:15 2009 -0700 @@ -950,15 +950,17 @@ } // Evaluate state_for early since it may emit code. - CodeEmitInfo* info = state_for(x, x->state()); CodeEmitInfo* patching_info = NULL; if (!x->klass()->is_loaded() || PatchALot) { patching_info = state_for(x, x->state_before()); // cannot re-use same xhandlers for multiple CodeEmitInfos, so - // clone all handlers. + // clone all handlers. This is handled transparently in other + // places by the CodeEmitInfo cloning logic but is handled + // specially here because a stub isn't being used. x->set_exception_handlers(new XHandlers(x->exception_handlers())); } + CodeEmitInfo* info = state_for(x, x->state()); i = dims->length(); while (i-- > 0) { diff -r 7530897778c5 -r 22b55d147bc1 hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp --- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Mon Aug 24 11:13:46 2009 -0700 +++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Mon Aug 24 22:26:15 2009 -0700 @@ -1047,16 +1047,17 @@ items->at_put(i, size); } - // need to get the info before, as the items may become invalid through item_free + // Evaluate state_for early since it may emit code. CodeEmitInfo* patching_info = NULL; if (!x->klass()->is_loaded() || PatchALot) { patching_info = state_for(x, x->state_before()); // cannot re-use same xhandlers for multiple CodeEmitInfos, so - // clone all handlers. + // clone all handlers. This is handled transparently in other + // places by the CodeEmitInfo cloning logic but is handled + // specially here because a stub isn't being used. x->set_exception_handlers(new XHandlers(x->exception_handlers())); } - CodeEmitInfo* info = state_for(x, x->state()); i = dims->length();