Index: test/cctest/test-debug.cc |
diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc |
index 07af24a6354db54d785571f78d422c6884dc4be1..6d889dfe09cc24d7921f17c878d6c7d1e36f7fc3 100644 |
--- a/test/cctest/test-debug.cc |
+++ b/test/cctest/test-debug.cc |
@@ -6679,3 +6679,37 @@ TEST(BuiltinsExceptionPrediction) { |
} |
CHECK(!fail); |
} |
+ |
+TEST(DebugGetPossibleBreakpointsReturnLocations) { |
+ LocalContext env; |
+ v8::Isolate* isolate = env->GetIsolate(); |
+ v8::HandleScope scope(isolate); |
+ v8::Local<v8::String> source = v8_str( |
+ "function fib(x) {\n" |
+ " if (x < 0) return;\n" |
+ " if (x === 0) return 1;\n" |
+ " if (x === 1) return fib(0);\n" |
+ " return x > 2 ? fib(x - 1) + fib(x - 2) : fib(1) + fib(0);\n" |
+ "}"); |
+ CompileRun(source); |
+ v8::PersistentValueVector<v8::debug::Script> scripts(isolate); |
+ v8::debug::GetLoadedScripts(isolate, scripts); |
+ CHECK(scripts.Size() == 1); |
+ std::vector<v8::debug::BreakLocation> locations; |
+ CHECK(scripts.Get(0)->GetPossibleBreakpoints( |
+ v8::debug::Location(0, 17), v8::debug::Location(), true, &locations)); |
+ int returns_count = 0; |
+ for (size_t i = 0; i < locations.size(); ++i) { |
+ if (locations[i].type() == v8::debug::kReturnBreakLocation) { |
+ ++returns_count; |
+ } |
+ } |
+ if (i::FLAG_turbo) { |
+ // With turbofan we generate one return location per return statement, |
+ // each has line = 5, column = 0 as statement position. |
+ CHECK(returns_count == 4); |
+ } else { |
+ // Without turbofan we generate one return location. |
+ CHECK(returns_count == 1); |
+ } |
+} |