Fix intermittent stack overflow in Hydrogen code generation in tests.
Review URL: https://chromiumcodereview.appspot.com/9290044 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10511 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
8e7c28c5b2
commit
d6f476dd41
@ -4798,7 +4798,8 @@ bool HGraphBuilder::TryInline(Call* expr, bool drop_extra) {
|
||||
|
||||
// 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 @@ bool HGraphBuilder::TryInline(Call* expr, bool drop_extra) {
|
||||
}
|
||||
|
||||
// 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 @@ bool HGraphBuilder::TryInline(Call* expr, bool drop_extra) {
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
@ -773,6 +773,12 @@ class HGraphBuilder: public AstVisitor {
|
||||
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; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user