Skip to content

Commit 25504a2

Browse files
jaro-sevcikCommit bot
authored andcommitted
[turbofan] Fix typing rule for Math.sign.
Review-Url: https://codereview.chromium.org/2306583002 Cr-Commit-Position: refs/heads/master@{#39103}
1 parent 3ecff04 commit 25504a2

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/compiler/type-cache.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ class TypeCache final {
4646
Type* const kTenOrUndefined =
4747
Type::Union(kSingletonTen, Type::Undefined(), zone());
4848
Type* const kMinusOneOrZero = CreateRange(-1.0, 0.0);
49-
Type* const kMinusOneToOne = CreateRange(-1.0, 1.0);
49+
Type* const kMinusOneToOneOrMinusZeroOrNaN = Type::Union(
50+
Type::Union(CreateRange(-1.0, 1.0), Type::MinusZero(), zone()),
51+
Type::NaN(), zone());
5052
Type* const kZeroOrOne = CreateRange(0.0, 1.0);
5153
Type* const kZeroOrOneOrNaN = Type::Union(kZeroOrOne, Type::NaN(), zone());
5254
Type* const kZeroToThirtyOne = CreateRange(0.0, 31.0);

src/compiler/typer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ Type* Typer::Visitor::JSCallFunctionTyper(Type* fun, Typer* t) {
13241324
case kMathTan:
13251325
return Type::Number();
13261326
case kMathSign:
1327-
return t->cache_.kMinusOneToOne;
1327+
return t->cache_.kMinusOneToOneOrMinusZeroOrNaN;
13281328
// Binary math functions.
13291329
case kMathAtan2:
13301330
case kMathPow:
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright 2016 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// Flags: --allow-natives-syntax
6+
7+
function f(a) {
8+
return Math.sign(+a) < 2;
9+
}
10+
11+
f(NaN);
12+
f(NaN);
13+
%OptimizeFunctionOnNextCall(f);
14+
assertFalse(f(NaN));

0 commit comments

Comments
 (0)