<?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>194625</bug_id>
          
          <creation_ts>2019-02-13 16:51:11 -0800</creation_ts>
          <short_desc>B3-O2 incorrectly optimizes this subtest</short_desc>
          <delta_ts>2019-02-24 13:23:58 -0800</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="Saam Barati">saam</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1505949</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-13 16:51:11 -0800</bug_when>
    <thetext>```
void testBitNotOnBooleanAndBranch32(int64_t a, int64_t b)
{
    Procedure proc;
    BasicBlock* root = proc.addBlock();
    BasicBlock* thenCase = proc.addBlock();
    BasicBlock* elseCase = proc.addBlock();

    Value* arg1 = root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(),
        root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0));
    Value* arg2 = root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(),
        root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1));
    Value* argsAreEqual = root-&gt;appendNew&lt;Value&gt;(proc, Equal, Origin(), arg1, arg2);
    Value* argsAreNotEqual = root-&gt;appendNew&lt;Value&gt;(proc, BitXor, Origin(),
        root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), -1),
        argsAreEqual);

    root-&gt;appendNewControlValue(
        proc, Branch, Origin(),
        argsAreNotEqual,
        FrequentedBlock(thenCase), FrequentedBlock(elseCase));

    thenCase-&gt;appendNewControlValue(
        proc, Return, Origin(),
        thenCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 42));

    elseCase-&gt;appendNewControlValue(
        proc, Return, Origin(),
        elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), -42));

    int32_t expectedValue = (a != b) ? 42 : -42;
    int32_t result = compileAndRun&lt;int32_t&gt;(proc, a, b);
    CHECK(result == expectedValue);
}
```

By my understanding of B3, I think this should always be &quot;argsAreNotEqual&quot; as truthy. And we should always return 42.

Interstingly, B3-02 does what I think the author of this test expected to happen, and to Xor with &quot;1&quot;, not &quot;-1&quot;. So I think this actually implicates a bug in B3 itself. Perhaps in isel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505951</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-13 16:53:06 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #0)
&gt; ```
&gt; void testBitNotOnBooleanAndBranch32(int64_t a, int64_t b)
&gt; {
&gt;     Procedure proc;
&gt;     BasicBlock* root = proc.addBlock();
&gt;     BasicBlock* thenCase = proc.addBlock();
&gt;     BasicBlock* elseCase = proc.addBlock();
&gt; 
&gt;     Value* arg1 = root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(),
&gt;         root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(),
&gt; GPRInfo::argumentGPR0));
&gt;     Value* arg2 = root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(),
&gt;         root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(),
&gt; GPRInfo::argumentGPR1));
&gt;     Value* argsAreEqual = root-&gt;appendNew&lt;Value&gt;(proc, Equal, Origin(),
&gt; arg1, arg2);
&gt;     Value* argsAreNotEqual = root-&gt;appendNew&lt;Value&gt;(proc, BitXor, Origin(),
&gt;         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), -1),
&gt;         argsAreEqual);
&gt; 
&gt;     root-&gt;appendNewControlValue(
&gt;         proc, Branch, Origin(),
&gt;         argsAreNotEqual,
&gt;         FrequentedBlock(thenCase), FrequentedBlock(elseCase));
&gt; 
&gt;     thenCase-&gt;appendNewControlValue(
&gt;         proc, Return, Origin(),
&gt;         thenCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 42));
&gt; 
&gt;     elseCase-&gt;appendNewControlValue(
&gt;         proc, Return, Origin(),
&gt;         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), -42));
&gt; 
&gt;     int32_t expectedValue = (a != b) ? 42 : -42;
&gt;     int32_t result = compileAndRun&lt;int32_t&gt;(proc, a, b);
&gt;     CHECK(result == expectedValue);
&gt; }
&gt; ```
&gt; 
&gt; By my understanding of B3, I think this should always be &quot;argsAreNotEqual&quot;
&gt; as truthy. And we should always return 42.
&gt; 
&gt; Interstingly, B3-02 does what I think the author of this test expected to
&gt; happen, and to Xor with &quot;1&quot;, not &quot;-1&quot;. So I think this actually implicates a
&gt; bug in B3 itself. Perhaps in isel.

This last sentence was written badly: B3 doesn&apos;t Xor with 1. It has the same effect though. It ends up fusing to just be a BranchCompare. I meant that I think the author intended for this to be &quot;1&quot;, not &quot;-1&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505953</commentid>
    <comment_count>2</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-13 16:55:17 -0800</bug_when>
    <thetext>I agree and understand the code like you: Branch considers everything different from 0 as being true.
It is an easy mistake, as we are not always super explicit between the boolean not (&apos;!&apos; in C, BitXor with 1 in B3) and the binary negation (&apos;~&apos; in C, BitXor with -1 in B3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507129</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-17 12:44:17 -0800</bug_when>
    <thetext>I&apos;m fixing this subtest in:
https://bugs.webkit.org/show_bug.cgi?id=194637

But we should use this bug to figure out why O2 incorrectly optimizes this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507818</commentid>
    <comment_count>4</comment_count>
      <attachid>362428</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-19 14:21:06 -0800</bug_when>
    <thetext>Created attachment 362428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507819</commentid>
    <comment_count>5</comment_count>
      <attachid>362428</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-19 14:24:32 -0800</bug_when>
    <thetext>Comment on attachment 362428
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=362428&amp;action=review

r=me

&gt; Source/JavaScriptCore/b3/testb3.cpp:3537
&gt; +        root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 1),

Can you add a test that would have done the wrong in thing in B3-O2 before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507841</commentid>
    <comment_count>6</comment_count>
      <attachid>362436</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-19 14:49:54 -0800</bug_when>
    <thetext>Created attachment 362436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507877</commentid>
    <comment_count>7</comment_count>
      <attachid>362436</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-19 15:27:21 -0800</bug_when>
    <thetext>Comment on attachment 362436
Patch

Clearing flags on attachment: 362436

Committed r241783: &lt;https://trac.webkit.org/changeset/241783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507878</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-19 15:27:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507884</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-19 15:30:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/48217706&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509387</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-02-23 12:46:18 -0800</bug_when>
    <thetext>Robin, what were you trying to do here?

[2491/4022] Building CXX object Source...akeFiles/testb3.dir/__/b3/testb3.cpp.o
../../Source/JavaScriptCore/b3/testb3.cpp: In function ‘void {anonymous}::testBitNotOnBooleanAndBranch32(int64_t, int64_t)’:
../../Source/JavaScriptCore/b3/testb3.cpp:3752:33: warning: ‘~’ on an expression of type bool [-Wbool-operation]
     int32_t expectedValue = ~(a == b) ? 42 : -42; // always 42
                              ~~~^~~~~
../../Source/JavaScriptCore/b3/testb3.cpp:3752:33: note: did you mean to use logical not (‘!’)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509479</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-24 13:23:10 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #10)
&gt; Robin, what were you trying to do here?
&gt; 
&gt; [2491/4022] Building CXX object
&gt; Source...akeFiles/testb3.dir/__/b3/testb3.cpp.o
&gt; ../../Source/JavaScriptCore/b3/testb3.cpp: In function ‘void
&gt; {anonymous}::testBitNotOnBooleanAndBranch32(int64_t, int64_t)’:
&gt; ../../Source/JavaScriptCore/b3/testb3.cpp:3752:33: warning: ‘~’ on an
&gt; expression of type bool [-Wbool-operation]
&gt;      int32_t expectedValue = ~(a == b) ? 42 : -42; // always 42
&gt;                               ~~~^~~~~
&gt; ../../Source/JavaScriptCore/b3/testb3.cpp:3752:33: note: did you mean to use
&gt; logical not (‘!’)?

We expect this to always be 42. It’s fine to remove the computation that the compiler proves is always 42.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509480</commentid>
    <comment_count>12</comment_count>
      <attachid>362436</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-24 13:23:58 -0800</bug_when>
    <thetext>Comment on attachment 362436
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=362436&amp;action=review

&gt; Source/JavaScriptCore/b3/testb3.cpp:3582
&gt; +    int32_t expectedValue = ~(a == b) ? 42 : -42; // always 42

Specifically, just change this line to be: “... = 42;”</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362428</attachid>
            <date>2019-02-19 14:21:06 -0800</date>
            <delta_ts>2019-02-19 14:49:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch194625</filename>
            <type>text/plain</type>
            <size>2415</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDIwMzczMDUyMDJlLi44MmE0ZWE2MDA4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDItMTkgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBCMy1PMiBpbmNvcnJl
Y3RseSBvcHRpbWl6ZXMgdGhpcyBzdWJ0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ2MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUcml2aWFsIGZpeC4gSW5zdGVhZCBvZiBkb2luZworICAgICAg
ICAgICAgaWYgKCFjb25kKSBmb28gZWxzZSBiYXIgPT4gaWYgKGNvbmQpIGJhciBlbHNlIGZvbwor
ICAgICAgICBCM0xvd2VyVG9BaXIgd2FzIGRvaW5nCisgICAgICAgICAgICBpZiAoeF5DKSBmb28g
ZWxzZSBiYXIgPT4gaWYgKGNvbmQpIGJhciBlbHNlIGZvbyB3aGVuZXZlciBDJjEsIGV2ZW4gaWYg
QyB3YXMgZm9yIGV4YW1wbGUgMy4KKworICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXROb3RPbkJv
b2xlYW5BbmRCcmFuY2gzMik6CisKIDIwMTktMDItMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBJbnRyb2R1Y2UgSlNOb25EZXN0cnVjdGlibGVQ
cm94eSBmb3IgSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrJ3MgR2xvYmFsVGhpcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBiYTE1NmJkMjVmOS4uMWIzYTky
ZTUyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0x
NDM4LDcgKzE0MzgsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkbyBuZWVkIGF0IGxlYXN0
IG9uZSBpdGVyYXRpb24gb2YgaXQgZm9yIENoZWNrLgogICAgICAgICBmb3IgKDs7KSB7CiAgICAg
ICAgICAgICBib29sIHNob3VsZEludmVydCA9Ci0gICAgICAgICAgICAgICAgKHZhbHVlLT5vcGNv
ZGUoKSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiAodmFsdWUtPmNo
aWxkKDEpLT5hc0ludCgpICYgMSkgJiYgdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKQor
ICAgICAgICAgICAgICAgICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yICYmIHZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkgJiYgKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSA9PSAxKSAmJiB2YWx1
ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCiAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5v
cGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKTsKICAgICAgICAg
ICAgIGlmICghc2hvdWxkSW52ZXJ0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCBiMDgwZTBkYzUwYS4uMTc5Y2I4ZTNkMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0zNTM0LDcgKzM1MzQsNyBAQCB2b2lkIHRl
c3RCaXROb3RPbkJvb2xlYW5BbmRCcmFuY2gzMihpbnQ2NF90IGEsIGludDY0X3QgYikKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKTsKICAgICBWYWx1ZSogYXJnc0FyZUVxdWFsID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBFcXVhbCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOwogICAgIFZh
bHVlKiBhcmdzQXJlTm90RXF1YWwgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhv
ciwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAtMSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxKSwKICAgICAgICAgYXJnc0FyZUVxdWFsKTsKIAogICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZSgK
</data>
<flag name="review"
          id="379051"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="379052"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362436</attachid>
            <date>2019-02-19 14:49:54 -0800</date>
            <delta_ts>2019-02-19 15:27:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch194625</filename>
            <type>text/plain</type>
            <size>4714</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDIwMzczMDUyMDJlLi5kNjM1ODFmMzgzNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDItMTkgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBCMy1PMiBpbmNvcnJl
Y3RseSBvcHRpbWl6ZXMgdGhpcyBzdWJ0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ2MjUKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJh
cmF0aS4KKworICAgICAgICBUcml2aWFsIGZpeC4gSW5zdGVhZCBvZiBkb2luZworICAgICAgICAg
ICAgaWYgKCFjb25kKSBmb28gZWxzZSBiYXIgPT4gaWYgKGNvbmQpIGJhciBlbHNlIGZvbworICAg
ICAgICBCM0xvd2VyVG9BaXIgd2FzIGRvaW5nCisgICAgICAgICAgICBpZiAoeF5DKSBmb28gZWxz
ZSBiYXIgPT4gaWYgKGNvbmQpIGJhciBlbHNlIGZvbyB3aGVuZXZlciBDJjEsIGV2ZW4gaWYgQyB3
YXMgZm9yIGV4YW1wbGUgMy4KKworICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXROb3RPbkJvb2xl
YW5BbmRCcmFuY2gzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Tm90T25Cb29sZWFuQW5kQnJh
bmNoMzIpOiBBZGRlZC4KKwogMjAxOS0wMi0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBw
bGUuY29tPgogCiAgICAgICAgIFtKU0NdIEludHJvZHVjZSBKU05vbkRlc3RydWN0aWJsZVByb3h5
IGZvciBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsncyBHbG9iYWxUaGlzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGJhMTU2YmQyNWY5Li4xYjNhOTJlNTIy
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTE0Mzgs
NyArMTQzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdlIGRvIG5lZWQgYXQgbGVhc3Qgb25l
IGl0ZXJhdGlvbiBvZiBpdCBmb3IgQ2hlY2suCiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkSW52ZXJ0ID0KLSAgICAgICAgICAgICAgICAodmFsdWUtPm9wY29kZSgp
ID09IEJpdFhvciAmJiB2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpICYmICh2YWx1ZS0+Y2hpbGQo
MSktPmFzSW50KCkgJiAxKSAmJiB2YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCisgICAg
ICAgICAgICAgICAgKHZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEp
LT5oYXNJbnQoKSAmJiAodmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpID09IDEpICYmIHZhbHVlLT5j
aGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKICAgICAgICAgICAgICAgICB8fCAodmFsdWUtPm9wY29k
ZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpOwogICAgICAgICAgICAg
aWYgKCFzaG91bGRJbnZlcnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCmluZGV4IGIwODBlMGRjNTBhLi5lMDU5OWUxYmI2MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTM1MjEsNyArMzUyMSw3IEBAIHZvaWQgdGVzdEJp
dE5vdE1lbTMyKGludDMyX3QgYSkKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnB1dCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oKHN0YXRpY19jYXN0PHVpbnQzMl90PihhKSBeIDB4ZmZmZmZmZmYpKSkp
OwogfQogCi12b2lkIHRlc3RCaXROb3RPbkJvb2xlYW5BbmRCcmFuY2gzMihpbnQ2NF90IGEsIGlu
dDY0X3QgYikKK3ZvaWQgdGVzdE5vdE9uQm9vbGVhbkFuZEJyYW5jaDMyKGludDY0X3QgYSwgaW50
NjRfdCBiKQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CkBAIC0zNTM0LDcgKzM1MzQsNyBAQCB2b2lkIHRlc3RCaXROb3RPbkJv
b2xlYW5BbmRCcmFuY2gzMihpbnQ2NF90IGEsIGludDY0X3QgYikKICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKICAgICBWYWx1ZSogYXJnc0FyZUVxdWFsID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBFcXVhbCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOwogICAgIFZhbHVlKiBhcmdzQXJl
Tm90RXF1YWwgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCks
Ci0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAt
MSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAxKSwKICAgICAgICAgYXJnc0FyZUVxdWFsKTsKIAogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKQEAgLTM1NTQsNiArMzU1NCwzNSBAQCB2b2lkIHRlc3RCaXROb3RPbkJvb2xlYW5B
bmRCcmFuY2gzMihpbnQ2NF90IGEsIGludDY0X3QgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludDMyX3Q+KHByb2MsIGEsIGIpID09IGV4cGVjdGVkVmFsdWUpOwogfQogCit2b2lkIHRlc3RC
aXROb3RPbkJvb2xlYW5BbmRCcmFuY2gzMihpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIFZhbHVl
KiBhcmdzQXJlRXF1YWwgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEVxdWFsLCBPcmln
aW4oKSwgYXJnMSwgYXJnMik7CisgICAgVmFsdWUqIGJpdE5vdEFyZ3NBcmVFcXVhbCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSwKKyAgICAgICAgYXJn
c0FyZUVxdWFsKTsKKworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBCcmFu
Y2gsIE9yaWdpbigpLAorICAgICAgICBiaXROb3RBcmdzQXJlRXF1YWwsIEZyZXF1ZW50ZWRCbG9j
ayh0aGVuQ2FzZSksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQ2FzZSkpOworCisgICAgdGhlbkNhc2Ut
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICB0
aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKSk7CisK
KyAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgLTQyKSk7CisKKyAgICBpbnQzMl90IGV4cGVjdGVkVmFsdWUgPSB+KGEgPT0gYikgPyA0
MiA6IC00MjsgLy8gYWx3YXlzIDQyCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihw
cm9jLCBhLCBiKSA9PSBleHBlY3RlZFZhbHVlKTsKK30KKwogdm9pZCB0ZXN0U2hsQXJncyhpbnQ2
NF90IGEsIGludDY0X3QgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE2ODU4LDYgKzE2
ODg3LDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTl9VTkFSWSh0ZXN0
Qml0Tm90QXJnMzIsIGludDMyT3BlcmFuZHMoKSk7CiAgICAgUlVOX1VOQVJZKHRlc3RCaXROb3RJ
bW0zMiwgaW50MzJPcGVyYW5kcygpKTsKICAgICBSVU5fVU5BUlkodGVzdEJpdE5vdE1lbTMyLCBp
bnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdE5vdE9uQm9vbGVhbkFuZEJyYW5j
aDMyLCBpbnQzMk9wZXJhbmRzKCksIGludDMyT3BlcmFuZHMoKSk7CiAgICAgUlVOX0JJTkFSWSh0
ZXN0Qml0Tm90T25Cb29sZWFuQW5kQnJhbmNoMzIsIGludDMyT3BlcmFuZHMoKSwgaW50MzJPcGVy
YW5kcygpKTsKIAogICAgIFJVTih0ZXN0U2hsQXJncygxLCAwKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>