Revision: 10511
Author: [email protected]
Date: Thu Jan 26 03:14:19 2012
Log: Fix intermittent stack overflow in Hydrogen code generation in
tests.
Review URL: https://chromiumcodereview.appspot.com/9290044
http://code.google.com/p/v8/source/detail?r=10511
Modified:
/branches/bleeding_edge/src/hydrogen.cc
/branches/bleeding_edge/src/hydrogen.h
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc Tue Jan 24 00:43:12 2012
+++ /branches/bleeding_edge/src/hydrogen.cc Thu Jan 26 03:14:19 2012
@@ -4798,7 +4798,8 @@
// Do a quick check on source code length to avoid parsing large
// inlining candidates.
- if (FLAG_limit_inlining && target->shared()->SourceSize() >
kMaxSourceSize) {
+ if ((FLAG_limit_inlining && target->shared()->SourceSize() >
kMaxSourceSize)
+ || target->shared()->SourceSize() > kUnlimitedMaxSourceSize) {
TraceInline(target, caller, "target text too big");
return false;
}
@@ -4846,7 +4847,8 @@
}
// We don't want to add more than a certain number of nodes from
inlining.
- if (FLAG_limit_inlining && inlined_count_ > kMaxInlinedNodes) {
+ if ((FLAG_limit_inlining && inlined_count_ > kMaxInlinedNodes) ||
+ inlined_count_ > kUnlimitedMaxInlinedNodes) {
TraceInline(target, caller, "cumulative AST node limit reached");
return false;
}
@@ -4874,7 +4876,8 @@
// Count the number of AST nodes added by inlining this call.
int nodes_added = AstNode::Count() - count_before;
- if (FLAG_limit_inlining && nodes_added > kMaxInlinedSize) {
+ if ((FLAG_limit_inlining && nodes_added > kMaxInlinedSize) ||
+ nodes_added > kUnlimitedMaxInlinedSize) {
TraceInline(target, caller, "target AST is too large");
return false;
}
=======================================
--- /branches/bleeding_edge/src/hydrogen.h Tue Jan 24 00:43:12 2012
+++ /branches/bleeding_edge/src/hydrogen.h Thu Jan 26 03:14:19 2012
@@ -773,6 +773,12 @@
static const int kMaxInlinedSize = 196;
static const int kMaxSourceSize = 600;
+ // Even in the 'unlimited' case we have to have some limit in order not
to
+ // overflow the stack.
+ static const int kUnlimitedMaxInlinedNodes = 1000;
+ static const int kUnlimitedMaxInlinedSize = 1000;
+ static const int kUnlimitedMaxSourceSize = 600;
+
// Simple accessors.
void set_function_state(FunctionState* state) { function_state_ = state;
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev