Reviewers: titzer,

Description:
Fix HCheckValue::Canonicalize wrt uninitialized HConstant unique.

[email protected]
BUG=348280
LOG=N

Please review this at https://codereview.chromium.org/183383006/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+15, -9 lines):
  M src/hydrogen-instructions.cc
  A + test/mjsunit/regress/regress-348280.js


Index: src/hydrogen-instructions.cc
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
index a35134952da753ee932fd104ee680e06f5173d2f..1c6f76f3b157313e3a8490494b14a0c92926498a 100644
--- a/src/hydrogen-instructions.cc
+++ b/src/hydrogen-instructions.cc
@@ -1566,10 +1566,11 @@ void HCheckValue::PrintDataTo(StringStream* stream) {


 HValue* HCheckValue::Canonicalize() {
-  return (value()->IsConstant() &&
-          HConstant::cast(value())->GetUnique() == object_)
-      ? NULL
-      : this;
+  if (value()->IsConstant()) {
+    Unique<Object> unique = HConstant::cast(value())->GetUnique();
+    if (unique.IsInitialized() && unique == object_) return NULL;
+  }
+  return this;
 }


Index: test/mjsunit/regress/regress-348280.js
diff --git a/test/mjsunit/regress/regress-347542.js b/test/mjsunit/regress/regress-348280.js
similarity index 55%
copy from test/mjsunit/regress/regress-347542.js
copy to test/mjsunit/regress/regress-348280.js
index 901d798fb7fbea45f0d9f3d8ba6c7a9846bf6dd6..319c270bef843c8b5202f3d699b8019ef9cdb1b5 100644
--- a/test/mjsunit/regress/regress-347542.js
+++ b/test/mjsunit/regress/regress-348280.js
@@ -4,8 +4,13 @@

 // Flags: --allow-natives-syntax

-function foo() {}
-foo();
-%OptimizeFunctionOnNextCall(foo);
-foo();
-%NeverOptimizeFunction(foo);
+function baz(f) { f(); }
+function goo() {}
+baz(goo);
+baz(goo);
+
+function bar(p) { if (p == 0) baz(1); }
+bar(1);
+bar(1);
+%OptimizeFunctionOnNextCall(bar);
+bar(1);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to