[vm, dynamic_modules] Handle native stack overflow in the interpreter TEST=corelib/error_stack_trace2_test Change-Id: I337c15eecddccbe770158fa493bf296c171f9f08 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/415940 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc index 5839b92..e5dae84 100644 --- a/runtime/vm/interpreter.cc +++ b/runtime/vm/interpreter.cc
@@ -1828,7 +1828,8 @@ // Check the interpreter's own stack limit for actual interpreter's stack // overflows, and also the thread's stack limit for scheduled interrupts. if (reinterpret_cast<uword>(SP) >= overflow_stack_limit() || - thread->HasScheduledInterrupts()) { + thread->HasScheduledInterrupts() || + !thread->os_thread()->HasStackHeadroom()) { Exit(thread, FP, SP + 1, pc); INVOKE_RUNTIME(DRT_InterruptOrStackOverflow, NativeArguments(thread, 0, nullptr, nullptr));
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status index e873b58..06012bc 100644 --- a/tests/corelib/corelib.status +++ b/tests/corelib/corelib.status
@@ -15,7 +15,6 @@ [ $compiler == dart2bytecode ] core_runtime_types_test: SkipByDesign # Contains dynamic calls. -error_stack_trace2_test: Crash [ $compiler == dartkp ] bigint_parse_radix_test: Slow, Pass # --no_intrinsify
diff --git a/tests/language/language.status b/tests/language/language.status index a827278..3bd6efc 100644 --- a/tests/language/language.status +++ b/tests/language/language.status
@@ -30,7 +30,6 @@ [ $compiler == dart2bytecode ] class_modifiers/trans_legacy/legacy_superdeclaration_test: Crash const/inference_test: Crash -final/syntax_test/08: Crash regress/regress45763_test: Crash vm/reflect_core_vm_test: Crash