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

Reply via email to