<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>228919</bug_id>
          
          <creation_ts>2021-08-09 11:47:43 -0700</creation_ts>
          <short_desc>New single bytecode loop for-in is missing many inline asm optimizations in 32bit</short_desc>
          <delta_ts>2021-08-18 09:15:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227989</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>angelos</cc>
    
    <cc>guijemont</cc>
    
    <cc>mikhail</cc>
    
    <cc>pmatos</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1782929</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-09 11:47:43 -0700</bug_when>
    <thetext>With the new bytecode format 32-bit is missing a bunch of inline assembly optimizations. Most of the code should be similar to the 64 bit code or the previous per-loop instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784597</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-16 11:48:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/81991479&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785120</commentid>
    <comment_count>2</comment_count>
      <attachid>435770</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-18 09:09:38 -0700</bug_when>
    <thetext>Created attachment 435770
for-in-infinite-loop.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785121</commentid>
    <comment_count>3</comment_count>
      <attachid>435771</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-18 09:10:19 -0700</bug_when>
    <thetext>Created attachment 435771
for-in-undefined.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785122</commentid>
    <comment_count>4</comment_count>
      <attachid>435770</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-18 09:13:47 -0700</bug_when>
    <thetext>Comment on attachment 435770
for-in-infinite-loop.js

function makeobj(n) {
  var obj = {};
  for (var i = 0; i &lt; n; ++i)
    obj[i] = i;
  return obj;
}

function testdelete(n) {
  for (var propToDelete = 0; propToDelete &lt;= n; ++propToDelete) {
    for (var iterToDelete = 0; iterToDelete &lt;= n; ++iterToDelete) {
      for (var iterToAdd = 0; iterToAdd &lt;= n; ++iterToAdd) {

        print(&quot;testing with &quot; + n + &quot; properties&quot;);
        print(&quot;deleting property number &quot; + propToDelete + &quot; on iteration &quot; +
              iterToDelete);
        print(&quot;adding a property on iteration &quot; + iterToAdd);

        var iter = 0;
        var o = makeobj(n);

        for (var i in o) {
          if (iter == iterToDelete)
            delete o[propToDelete];

          if (iter == iterToAdd)
            o[&quot;xxx&quot;] = 1;

          // print(&quot;iter: &quot; + iter + &quot;i: &quot; + i);
          print(i)

          ++ iter;
        }
      }
    }
  }
}

testdelete(6);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785123</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-18 09:15:20 -0700</bug_when>
    <thetext>Added a couple of reduced test cases where jsc starts to return unexpected results:

* for-in-infinite-loop.js: for-in seems to be stuck and doesn&apos;t increment the value

* for-in-undefined.js: for-in returns undefined object at iteration 94</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>435770</attachid>
            <date>2021-08-18 09:09:38 -0700</date>
            <delta_ts>2021-08-18 09:13:47 -0700</delta_ts>
            <desc>for-in-infinite-loop.js</desc>
            <filename>for-in-infinite-loop.js</filename>
            <type>text/javascript</type>
            <size>730</size>
            <attacher name="Mikhail R. Gadelha">mikhail</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gYXNzZXJ0KG5hbWUsIGFjdHVhbCwgZXhwZWN0ZWQpIHsKICAgIGlmIChhY3R1YWwg
IT0gZXhwZWN0ZWQpIHsKICAgICAgICBwcmludCgiRkFJTEVEIHRlc3QgIiArIG5hbWUgKyAiOiBl
eHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiLCBhY3R1YWw6ICIgKyBhY3R1YWwpOwogICAgICAgIHRo
cm93ICJGQUlMRUQiOwogICAgfQp9CgpmdW5jdGlvbiBjaGVja1Jlc3VsdChuYW1lLCByZXN1bHQs
IGV4cGVjdGVkSywgZXhwZWN0ZWRQcm9wKSB7CiAgICBhc3NlcnQobmFtZSwgcmVzdWx0WzBdLCBl
eHBlY3RlZEspOwogICAgYXNzZXJ0KG5hbWUsIHJlc3VsdFsxXSwgZXhwZWN0ZWRQcm9wKTsKfQoK
Ly8gRm9ySW4gb24gSW5kZXhlZCBwcm9wZXJ0aWVzLgoKZnVuY3Rpb24gdGVzdEluZGV4ZWRQcm9w
ZXJ0aWVzKG8pIHsKICAgIGZvciAodmFyIGsgaW4gbykgewogICAgICAgIHsKICAgICAgICAgICAg
ZnVuY3Rpb24gaygpIHsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gWyBrLCBvW2tdIF07CiAg
ICB9Cn0KCnZhciBvID0gWzQyXTsKZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgewogICAg
dmFyIHJlc3VsdCA9IHRlc3RJbmRleGVkUHJvcGVydGllcyhvKTsKICAgIHByaW50KCJpOiAiICsg
aSArICIsICIgKyByZXN1bHQpOwogICAgY2hlY2tSZXN1bHQoInRlc3RJbmRleGVkUHJvcGVydGll
cyIsIHJlc3VsdCwgImZ1bmN0aW9uIGsoKSB7IH0iLCB1bmRlZmluZWQpOwp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>435771</attachid>
            <date>2021-08-18 09:10:19 -0700</date>
            <delta_ts>2021-08-18 09:12:49 -0700</delta_ts>
            <desc>for-in-undefined.js</desc>
            <filename>for-in-undefined.js</filename>
            <type>text/javascript</type>
            <size>730</size>
            <attacher name="Mikhail R. Gadelha">mikhail</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gYXNzZXJ0KG5hbWUsIGFjdHVhbCwgZXhwZWN0ZWQpIHsKICAgIGlmIChhY3R1YWwg
IT0gZXhwZWN0ZWQpIHsKICAgICAgICBwcmludCgiRkFJTEVEIHRlc3QgIiArIG5hbWUgKyAiOiBl
eHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiLCBhY3R1YWw6ICIgKyBhY3R1YWwpOwogICAgICAgIHRo
cm93ICJGQUlMRUQiOwogICAgfQp9CgpmdW5jdGlvbiBjaGVja1Jlc3VsdChuYW1lLCByZXN1bHQs
IGV4cGVjdGVkSywgZXhwZWN0ZWRQcm9wKSB7CiAgICBhc3NlcnQobmFtZSwgcmVzdWx0WzBdLCBl
eHBlY3RlZEspOwogICAgYXNzZXJ0KG5hbWUsIHJlc3VsdFsxXSwgZXhwZWN0ZWRQcm9wKTsKfQoK
Ly8gRm9ySW4gb24gSW5kZXhlZCBwcm9wZXJ0aWVzLgoKZnVuY3Rpb24gdGVzdEluZGV4ZWRQcm9w
ZXJ0aWVzKG8pIHsKICAgIGZvciAodmFyIGsgaW4gbykgewogICAgICAgIHsKICAgICAgICAgICAg
ZnVuY3Rpb24gaygpIHsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gWyBrLCBvW2tdIF07CiAg
ICB9Cn0KCnZhciBvID0gWzQyXTsKZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgewogICAg
dmFyIHJlc3VsdCA9IHRlc3RJbmRleGVkUHJvcGVydGllcyhvKTsKICAgIHByaW50KCJpOiAiICsg
aSArICIsICIgKyByZXN1bHQpOwogICAgY2hlY2tSZXN1bHQoInRlc3RJbmRleGVkUHJvcGVydGll
cyIsIHJlc3VsdCwgImZ1bmN0aW9uIGsoKSB7IH0iLCB1bmRlZmluZWQpOwp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>