Changeset 227742 in webkit


Ignore:
Timestamp:
Jan 29, 2018 11:13:45 AM (6 years ago)
Author:
msaboff@apple.com
Message:

REGRESSION (r227341): DFG_ASSERT failure at JSC::DFG::AtTailAbstractState::forNode()
https://bugs.webkit.org/show_bug.cgi?id=182249

Reviewed by Keith Miller.

JSTests:

New regression test.

  • stress/compare-clobber-untypeduse.js: Added.

Source/JavaScriptCore:

Changed clobberize() handling of CompareEq, et al to properly handle comparisons between
Untyped and Object values when compared against built in types. Such comparisons can
invoke toNumber() or other methods.

  • dfg/DFGClobberize.h:

(JSC::DFG::clobberize):

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JSTests/ChangeLog

    r227738 r227742  
     12018-01-29  Michael Saboff  <msaboff@apple.com>
     2
     3        REGRESSION (r227341): DFG_ASSERT failure at JSC::DFG::AtTailAbstractState::forNode()
     4        https://bugs.webkit.org/show_bug.cgi?id=182249
     5
     6        Reviewed by Keith Miller.
     7
     8        New regression test.
     9
     10        * stress/compare-clobber-untypeduse.js: Added.
     11
    1122018-01-29  Matt Lewis  <jlewis3@apple.com>
    213
  • trunk/Source/JavaScriptCore/ChangeLog

    r227738 r227742  
     12018-01-29  Michael Saboff  <msaboff@apple.com>
     2
     3        REGRESSION (r227341): DFG_ASSERT failure at JSC::DFG::AtTailAbstractState::forNode()
     4        https://bugs.webkit.org/show_bug.cgi?id=182249
     5
     6        Reviewed by Keith Miller.
     7
     8        Changed clobberize() handling of CompareEq, et al to properly handle comparisons between
     9        Untyped and Object values when compared against built in types.  Such comparisons can
     10        invoke toNumber() or other methods.
     11
     12        * dfg/DFGClobberize.h:
     13        (JSC::DFG::clobberize):
     14
    1152018-01-29  Matt Lewis  <jlewis3@apple.com>
    216
  • trunk/Source/JavaScriptCore/dfg/DFGClobberize.h

    r227723 r227742  
    15461546            return;
    15471547        }
    1548         if (!node->isBinaryUseKind(UntypedUse)) {
     1548
     1549        if (node->op() == CompareEq && node->isBinaryUseKind(ObjectUse)) {
    15491550            def(PureValue(node));
    15501551            return;
    15511552        }
    1552         read(World);
    1553         write(Heap);
     1553        if (node->child1().useKind() == UntypedUse || node->child1().useKind() == ObjectUse
     1554            || node->child2().useKind() == UntypedUse || node->child2().useKind() == ObjectUse) {
     1555            read(World);
     1556            write(Heap);
     1557            return;
     1558        }
     1559
     1560        def(PureValue(node));
    15541561        return;
    15551562
Note: See TracChangeset for help on using the changeset viewer.