Revision: 12096
Author: [email protected]
Date: Mon Jul 16 06:38:17 2012
Log: Fix missing tagging of stack value in finally block.
[email protected]
BUG=chromium:137496
TEST=cctest/test-api/Regress137496
Review URL: https://chromiumcodereview.appspot.com/10787017
http://code.google.com/p/v8/source/detail?r=12096
Modified:
/branches/bleeding_edge/src/arm/full-codegen-arm.cc
/branches/bleeding_edge/src/ia32/full-codegen-ia32.cc
/branches/bleeding_edge/src/mips/full-codegen-mips.cc
/branches/bleeding_edge/src/x64/full-codegen-x64.cc
/branches/bleeding_edge/test/cctest/test-api.cc
=======================================
--- /branches/bleeding_edge/src/arm/full-codegen-arm.cc Fri Jul 13 09:33:27
2012
+++ /branches/bleeding_edge/src/arm/full-codegen-arm.cc Mon Jul 16 06:38:17
2012
@@ -4509,6 +4509,7 @@
ExternalReference::address_of_has_pending_message(isolate());
__ mov(ip, Operand(has_pending_message));
__ ldr(r1, MemOperand(ip));
+ __ SmiTag(r1);
__ push(r1);
ExternalReference pending_message_script =
@@ -4529,6 +4530,7 @@
__ str(r1, MemOperand(ip));
__ pop(r1);
+ __ SmiUntag(r1);
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ mov(ip, Operand(has_pending_message));
=======================================
--- /branches/bleeding_edge/src/ia32/full-codegen-ia32.cc Fri Jul 13
09:33:27 2012
+++ /branches/bleeding_edge/src/ia32/full-codegen-ia32.cc Mon Jul 16
06:38:17 2012
@@ -4485,6 +4485,7 @@
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ mov(edx, Operand::StaticVariable(has_pending_message));
+ __ SmiTag(edx);
__ push(edx);
ExternalReference pending_message_script =
@@ -4503,6 +4504,7 @@
__ mov(Operand::StaticVariable(pending_message_script), edx);
__ pop(edx);
+ __ SmiUntag(edx);
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ mov(Operand::StaticVariable(has_pending_message), edx);
=======================================
--- /branches/bleeding_edge/src/mips/full-codegen-mips.cc Fri Jul 13
02:14:43 2012
+++ /branches/bleeding_edge/src/mips/full-codegen-mips.cc Mon Jul 16
06:38:17 2012
@@ -4545,6 +4545,7 @@
ExternalReference::address_of_has_pending_message(isolate());
__ li(at, Operand(has_pending_message));
__ lw(a1, MemOperand(at));
+ __ SmiTag(a1);
__ push(a1);
ExternalReference pending_message_script =
@@ -4565,6 +4566,7 @@
__ sw(a1, MemOperand(at));
__ pop(a1);
+ __ SmiUntag(a1);
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ li(at, Operand(has_pending_message));
=======================================
--- /branches/bleeding_edge/src/x64/full-codegen-x64.cc Fri Jul 13 09:33:27
2012
+++ /branches/bleeding_edge/src/x64/full-codegen-x64.cc Mon Jul 16 06:38:17
2012
@@ -4477,6 +4477,7 @@
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ Load(rdx, has_pending_message);
+ __ Integer32ToSmi(rdx, rdx);
__ push(rdx);
ExternalReference pending_message_script =
@@ -4496,6 +4497,7 @@
__ Store(pending_message_script, rdx);
__ pop(rdx);
+ __ SmiToInteger32(rdx, rdx);
ExternalReference has_pending_message =
ExternalReference::address_of_has_pending_message(isolate());
__ Store(has_pending_message, rdx);
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Mon Jul 16 02:53:32 2012
+++ /branches/bleeding_edge/test/cctest/test-api.cc Mon Jul 16 06:38:17 2012
@@ -16856,3 +16856,17 @@
"var result = f(obj);");
CHECK(context->Global()->Get(v8_str("result"))->IsUndefined());
}
+
+
+THREADED_TEST(Regress137496) {
+ i::FLAG_expose_gc = true;
+ v8::HandleScope scope;
+ LocalContext context;
+
+ // Compile a try-finally clause where the finally block causes a GC
+ // while there still is a message pending for external reporting.
+ TryCatch try_catch;
+ try_catch.SetVerbose(true);
+ CompileRun("try { throw new Error(); } finally { gc(); }");
+ CHECK(try_catch.HasCaught());
+}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev