Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index 55bb466416fa352a6785cd79c757f272be04d0d1..3ccc3d77c853f6acc60e0aae5e428c2e5229f004 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -3889,4 +3889,28 @@ TEST(AddInstructionChangesNewSpacePromotion) { |
g->Call(global, 1, args1); |
heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
} |
-#endif |
+ |
+ |
+void OnFatalErrorExpectOOM(const char* location, const char* message) { |
+ // Exit with 0 if the location matches our expectation. |
+ exit(strcmp(location, "CALL_AND_RETRY_LAST")); |
+} |
+ |
+ |
+TEST(CEntryStubOOM) { |
+ i::FLAG_allow_natives_syntax = true; |
+ CcTest::InitializeVM(); |
+ v8::HandleScope scope(CcTest::isolate()); |
+ v8::V8::SetFatalErrorHandler(OnFatalErrorExpectOOM); |
+ |
+ CompileRun( |
+ "%SetFlags('--gc-interval=1');" |
+ "var a = [];" |
+ "a.__proto__ = [];" |
+ "a.unshift(1)"); |
+ |
+ // We should have run into an out of memory. |
+ UNREACHABLE(); |
+} |
+ |
+#endif // DEBUG |