diff --git a/deps/v8/src/compiler/representation-change.h b/deps/v8/src/compiler/representation-change.h index e4c257f2ea4bbe..8720afdde3ff89 100644 --- a/deps/v8/src/compiler/representation-change.h +++ b/deps/v8/src/compiler/representation-change.h @@ -296,6 +296,13 @@ class RepresentationChanger { if (value == 0 || value == 1) return node; return jsgraph()->Int32Constant(1); // value != 0 } + case IrOpcode::kNumberConstant: { + double value = OpParameter(node); + if (std::isnan(value) || value == 0.0) { + return jsgraph()->Int32Constant(0); + } + return jsgraph()->Int32Constant(1); + } case IrOpcode::kHeapConstant: { Handle handle = OpParameter >(node).handle(); DCHECK(*handle == isolate()->heap()->true_value() || diff --git a/deps/v8/src/version.cc b/deps/v8/src/version.cc index 6266db9977d43f..3b1c220f57db26 100644 --- a/deps/v8/src/version.cc +++ b/deps/v8/src/version.cc @@ -35,7 +35,7 @@ #define MAJOR_VERSION 4 #define MINOR_VERSION 1 #define BUILD_NUMBER 0 -#define PATCH_LEVEL 12 +#define PATCH_LEVEL 14 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define IS_CANDIDATE_VERSION 0 diff --git a/deps/v8/test/mjsunit/compiler/regress-bit-number-constant.js b/deps/v8/test/mjsunit/compiler/regress-bit-number-constant.js new file mode 100644 index 00000000000000..d36fe30ce06e61 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-bit-number-constant.js @@ -0,0 +1,17 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var stdlib = this; +var buffer = new ArrayBuffer(64 * 1024); +var foreign = {} + +var foo = (function Module(stdlib, foreign, heap) { + "use asm"; + function foo(i) { + return !(i ? 1 : false); + } + return {foo:foo}; +})(stdlib, foreign, buffer).foo; + +assertFalse(foo(1));