提交 3883a501 编写于 作者: N never

6875329: fix for 6795465 broke exception handler cloning

Reviewed-by: kvn
上级 1fde672f
...@@ -950,15 +950,17 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) { ...@@ -950,15 +950,17 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) {
} }
// Evaluate state_for early since it may emit code. // Evaluate state_for early since it may emit code.
CodeEmitInfo* info = state_for(x, x->state());
CodeEmitInfo* patching_info = NULL; CodeEmitInfo* patching_info = NULL;
if (!x->klass()->is_loaded() || PatchALot) { if (!x->klass()->is_loaded() || PatchALot) {
patching_info = state_for(x, x->state_before()); patching_info = state_for(x, x->state_before());
// cannot re-use same xhandlers for multiple CodeEmitInfos, so // 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())); x->set_exception_handlers(new XHandlers(x->exception_handlers()));
} }
CodeEmitInfo* info = state_for(x, x->state());
i = dims->length(); i = dims->length();
while (i-- > 0) { while (i-- > 0) {
......
...@@ -1047,16 +1047,17 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) { ...@@ -1047,16 +1047,17 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) {
items->at_put(i, size); 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; CodeEmitInfo* patching_info = NULL;
if (!x->klass()->is_loaded() || PatchALot) { if (!x->klass()->is_loaded() || PatchALot) {
patching_info = state_for(x, x->state_before()); patching_info = state_for(x, x->state_before());
// cannot re-use same xhandlers for multiple CodeEmitInfos, so // 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())); x->set_exception_handlers(new XHandlers(x->exception_handlers()));
} }
CodeEmitInfo* info = state_for(x, x->state()); CodeEmitInfo* info = state_for(x, x->state());
i = dims->length(); i = dims->length();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册