<?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>110840</bug_id>
          
          <creation_ts>2013-02-25 20:25:11 -0800</creation_ts>
          <short_desc>DFG CFA should leave behind information in Edge that says if the Edge&apos;s type check is proven to succeed</short_desc>
          <delta_ts>2013-02-28 12:44:19 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mario</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841572</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-25 20:25:11 -0800</bug_when>
    <thetext>It&apos;s only sound to DCE an operation if the type checks that will be performed on it are proven to succeed.  Let&apos;s consider two examples.

Example #1:

function foo(a, b, c) {
    var x = a + b + c;
}

For simplicity let&apos;s assume that argument type checking isn&apos;t happening. This transforms to the following DFG IR, if a, b, c are predicted int:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: ValueAdd(Int32:@1, Int32:@2)
4: GetLocal(arg3)
5: ValueAdd(Int32:@3, Int32:@4)

@5 is dead only if the inputs are really numbers, and the rest of the graph is only dead because @5 is dead, and only if the inputs to @3 are also numbers. But if any of the inputs were not numbers, then we could get strangeness: the ValueAdd&apos;s could cause valueOf methods to be called, and those methods could have side-effects.

Hence a sound DCE of this code would lead to:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: ValueAdd(Int32:@1, Int32:@2)
4: GetLocal(arg3)
5: Phantom(Int32:@3, Int32:@4)

This is because @5&apos;s behavior is dependent on what @3 returns, and @4 is not yet proven to be an int32.  Type check hoisting here could save us; we could instead do:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: GetLocal(arg3)
4: Phantom(Int32:@1, Int32:@2, Int32:@3)

And have @4 exit to the bytecode index associated with &apos;a + b&apos;.

Broadly speaking, any dead operation that has any children that require type checking needs to keep all of its children alive, and needs to be transformed into a Phantom (with checking edges) on all of its children.

With type check hoisting on arguments enabled (which is true in the DFG right now), we could get more efficient code: we know that both ValueAdd&apos;s must operate on Int32&apos;s - there are no other types that will flow in. This is the purpose of the bug: have the CFA tell us that the children are already checked. This is a flow-sensitive property and so is a property of the edge, not the node. Consider that the CFA could tell us that edges are already checked; we would get:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: ValueAdd(Proved:Int32:@1, Proved:Int32:@2)
4: GetLocal(arg3)
5: ValueAdd(Proved:Int32:@3, Proved:Int32:@4)

At this point we know that we can simply kill the whole graph, since nothing can have side-effects.

One tricky caveat: @3 could return a double, if not for the overflow check. Of course, returning a double will not affect @5&apos;s effectfulness. It will be interesting to come up with a way of handling this.

Example #2:

Consider the code:

function foo(a, b) {
    return [a, b] - 5;
}

In this case, [] will have valueOf called on it, which will involve some sort of prototype chain walk. In general, we cannot guarantee what valueOf will do. It will probably do things to the contents of the array.

This code will transform to:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: NewArray(@1, @2)
4: JSConstant(Int32:5)
5: ArithSub(@3, @4)

In this case, @5 is dead, but its deadness is predicated on the input types not being objects. ArithSub should, in this case, speculate int, since the inputs are not double and the DFG doesn&apos;t handle object subtraction. We will get:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: NewArray(@1, @2)
4: JSConstant(Int32:5)
5: ArithSub(NotChecked:Int32:@3, Checked:Int32:@4)

Notice that @3 is not checked at @5, since the CFA will not have been able to prove that @3 is an int (since it isn&apos;t one). This means that the best that the DCE could do is:

1: GetLocal(arg1)
2: GetLocal(arg2)
3: NewArray(@1, @2)
4: JSConstant(Int32:5)
5: Phantom(NotChecked:Int32:@3, Checked:Int32:@4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841693</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-26 00:02:24 -0800</bug_when>
    <thetext>This all makes me think that DCE over conditionally-pure things may not be worth it.

Live would be much easier if we just continued saying that ArithAdd/Sub/Mul/Div are not DCE-able, period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842736</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-26 23:26:48 -0800</bug_when>
    <thetext>Nah.  This feels way too complicated.  I will come back to this later, and probably do it some other way.

In particular, I just tested to see what would happen if I turned off basically all DCE.  Nothing happened.  Nothing got slower.  It&apos;s not worth it to over think this, at least not until some real-world test needs it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843361</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-27 12:12:42 -0800</bug_when>
    <thetext>I think I do in fact need this.

The crucial bits are:

- Unless we want to do a really complex static analysis we should use NodeMustGenerate on any node that does non-type-check speculation checks that guard the type they return (like an overflow check in an arith node).

- We need to be able to kill nodes that do type checks, and nodes whose result may flow into a type check - but the latter is only safe if the type check is proven successful.  Hence we need CFA to tell us if the type check is proven to succeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843408</commentid>
    <comment_count>4</comment_count>
      <attachid>190580</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-27 13:03:03 -0800</bug_when>
    <thetext>Created attachment 190580
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843430</commentid>
    <comment_count>5</comment_count>
      <attachid>190580</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-27 13:19:10 -0800</bug_when>
    <thetext>Comment on attachment 190580
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844304</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 11:47:24 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/144340</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190580</attachid>
            <date>2013-02-27 13:03:03 -0800</date>
            <delta_ts>2013-02-27 13:19:09 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11138</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0MjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEzLTAyLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgbGVhdmUgYmVoaW5kIGluZm9ybWF0aW9uIGluIEVkZ2UgdGhhdCBzYXlz
IGlmIHRoZSBFZGdlJ3MgdHlwZSBjaGVjayBpcyBwcm92ZW4gdG8gc3VjY2VlZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGRvZXNu
J3QgYWRkIGFueSBvYnNlcnZhYmxlIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGNvbXBpbGVyLCB5ZXQu
IEJ1dCBpdCBkb2VzIGdpdmUKKyAgICAgICAgZXZlcnkgcGhhc2UgdGhhdCBydW5zIGFmdGVyIENG
QSB0aGUgYWJpbGl0eSB0byBrbm93LCBpbiBPKDEpIHRpbWUsIHdoZXRoZXIgYW4gZWRnZQorICAg
ICAgICB3aWxsIG5lZWQgdG8gZXhlY3V0ZSBhIHR5cGUgY2hlY2suCisKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZp
bHRlckVkZ2VCeVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVy
QnlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6REZHOjppc1Byb3ZlZCk6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OnByb29mU3RhdHVzRm9ySXNQcm92ZWQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpF
ZGdlOjp1c2VLaW5kVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRVc2VL
aW5kKToKKyAgICAgICAgKEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnByb29mU3Rh
dHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpwcm9vZlN0YXR1cyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2V0UHJvb2ZTdGF0dXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkVkZ2U6OmlzUHJvdmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpuZWVkc0NoZWNr
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzaGlmdCk6CisgICAgICAgIChKU0M6OkRGRzo6
RWRnZTo6bWFrZVdvcmQpOgorCiAyMDEzLTAyLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBzb21lIHVuc291bmQgREZHIERDRQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0
NDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0
ZUVkZ2VzKE5vZGUqKTsKICAgICB2b2lkIGV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOwogICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSog
bm9kZSwgRWRnZSBlZGdlKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2Uo
Tm9kZSogbm9kZSwgRWRnZSYgZWRnZSkKICAgICB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
ICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CkBAIC0xOTcsNyArMTk3LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAKLSAgICAg
ICAgZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2Uubm9kZSgpLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNl
S2luZCgpKSk7CisgICAgICAgIGZpbHRlckJ5VHlwZShub2RlLCBlZGdlLCB0eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSk7CiAgICAgfQogICAgIAogICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0
ZSB0aGUgZWZmZWN0cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBjaGFuZ2VzIHRoZSBhYnN0cmFj
dApAQCAtMjYwLDExICsyNjAsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9k
ZSwgTm9kZSogY2hpbGQsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBFZGdlJiBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0
eXBlKQogICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGNoaWxk
KTsKLSAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQorICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUoZWRnZSk7CisgICAgICAgIGlmICh2YWx1ZS5tX3R5cGUgJiB+
dHlwZSkgewogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAg
IGVkZ2Uuc2V0UHJvb2ZTdGF0dXMoTmVlZHNDaGVjayk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhJc1Byb3ZlZCk7CisgICAgICAgIAogICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ0MjE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNiArNDEsMTgg
QEAgdm9pZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVtcChOb2RlKiB2YWx1ZQogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6REZHOjpP
cHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHN0YXRlKQordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZH
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3B0aW1pemF0aW9uRml4
cG9pbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBKU0M6
OkRGRzo6QmVmb3JlRml4cG9pbnQ6CisgICAgY2FzZSBCZWZvcmVGaXhwb2ludDoKICAgICAgICAg
b3V0LnByaW50KCJCZWZvcmVGaXhwb2ludCIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpT
Qzo6REZHOjpGaXhwb2ludE5vdENvbnZlcmdlZDoKKyAgICBjYXNlIEZpeHBvaW50Tm90Q29udmVy
Z2VkOgogICAgICAgICBvdXQucHJpbnQoIkZpeHBvaW50Tm90Q29udmVyZ2VkIik7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSlNDOjpERkc6OkZpeHBvaW50Q29udmVyZ2VkOgorICAgIGNhc2Ug
Rml4cG9pbnRDb252ZXJnZWQ6CiAgICAgICAgIG91dC5wcmludCgiRml4cG9pbnRDb252ZXJnZWQi
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU5LDEzICs2MSwxMyBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgfQogfQogCi12b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkdyYXBoRm9ybSBmb3JtKQor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEdyYXBoRm9ybSBmb3JtKQogewog
ICAgIHN3aXRjaCAoZm9ybSkgewotICAgIGNhc2UgSlNDOjpERkc6OkxvYWRTdG9yZToKKyAgICBj
YXNlIExvYWRTdG9yZToKICAgICAgICAgb3V0LnByaW50KCJMb2FkU3RvcmUiKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKU0M6OkRGRzo6VGhyZWFkZWRDUFM6CisgICAgY2FzZSBUaHJlYWRl
ZENQUzoKICAgICAgICAgb3V0LnByaW50KCJUaHJlYWRlZENQUyIpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtNzQsMTMgKzc2LDEzIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBKU0MKICAgICB9CiB9CiAKLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OkRGRzo6VW5pZmljYXRpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmlmaWNhdGlvblN0YXRlIHN0YXRlKQogewogICAg
IHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEpTQzo6REZHOjpMb2NhbGx5VW5pZmllZDoKKyAg
ICBjYXNlIExvY2FsbHlVbmlmaWVkOgogICAgICAgICBvdXQucHJpbnQoIkxvY2FsbHlVbmlmaWVk
Iik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSlNDOjpERkc6Okdsb2JhbGx5VW5pZmllZDoK
KyAgICBjYXNlIEdsb2JhbGx5VW5pZmllZDoKICAgICAgICAgb3V0LnByaW50KCJHbG9iYWxseVVu
aWZpZWQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTg5LDYgKzkxLDIxIEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0MKICAgICB9CiB9CiAKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9vZlN0YXR1cyBzdGF0dXMpCit7
CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIElzUHJvdmVkOgorICAgICAgICBvdXQu
cHJpbnQoIklzUHJvdmVkIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmVlZHNDaGVjazoK
KyAgICAgICAgb3V0LnByaW50KCJOZWVkc0NoZWNrIik7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNp
b24gMTQ0MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDYgKzIyMSwxOSBAQCBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1v
ZGUgeyBBdXRvbWF0aWNPCiAKIGVudW0gU3BlY3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3Bl
Y3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24gfTsKIAorZW51bSBQcm9vZlN0YXR1cyB7IE5l
ZWRzQ2hlY2ssIElzUHJvdmVkIH07CisKK2lubGluZSBib29sIGlzUHJvdmVkKFByb29mU3RhdHVz
IHByb29mU3RhdHVzKQoreworICAgIEFTU0VSVChwcm9vZlN0YXR1cyA9PSBJc1Byb3ZlZCB8fCBw
cm9vZlN0YXR1cyA9PSBOZWVkc0NoZWNrKTsKKyAgICByZXR1cm4gcHJvb2ZTdGF0dXMgPT0gSXNQ
cm92ZWQ7Cit9CisKK2lubGluZSBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1c0ZvcklzUHJvdmVkKGJv
b2wgaXNQcm92ZWQpCit7CisgICAgcmV0dXJuIGlzUHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0No
ZWNrOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0Fu
ZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogewpAQCAtMjM3LDYgKzI1MCw3IEBAIG5hbWVzcGFjZSBX
VEYgewogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok9wdGltaXph
dGlvbkZpeHBvaW50U3RhdGUpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpERkc6OkdyYXBoRm9ybSk7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkRGRzo6VW5pZmljYXRpb25TdGF0ZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkRGRzo6UHJvb2ZTdGF0dXMpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNDQyMTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw4ICszNCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRn
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGlmICh1c2VLaW5kKCkgIT0g
VW50eXBlZFVzZSkKKyAgICBpZiAodXNlS2luZCgpICE9IFVudHlwZWRVc2UpIHsKKyAgICAgICAg
aWYgKG5lZWRzQ2hlY2soKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiQ2hlY2s6Iik7CiAgICAg
ICAgIG91dC5wcmludCh1c2VLaW5kKCksICI6Iik7CisgICAgfQogICAgIG91dC5wcmludChub2Rl
KCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24g
MTQ0MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDMyICszOSwxMiBAQCBjbGFzcyBBZGphY2VuY3lMaXN0OwogCiBjbGFzcyBF
ZGdlIHsKIHB1YmxpYzoKLSAgICBFZGdlKCkKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUg
PSAwLCBVc2VLaW5kIHVzZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1
cyA9IE5lZWRzQ2hlY2spCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29kZWRX
b3JkKG1ha2VXb3JkKDAsIFVudHlwZWRVc2UpKQotI2Vsc2UKLSAgICAgICAgOiBtX25vZGUoMCkK
LSAgICAgICAgLCBtX2VuY29kZWRXb3JkKFVudHlwZWRVc2UpCi0jZW5kaWYKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSkKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgVW50eXBlZFVzZSkpCi0j
ZWxzZQotICAgICAgICA6IG1fbm9kZShub2RlKQotICAgICAgICAsIG1fZW5jb2RlZFdvcmQoVW50
eXBlZFVzZSkKLSNlbmRpZgotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRWRnZShOb2RlKiBub2Rl
LCBVc2VLaW5kIHVzZUtpbmQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29k
ZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQpKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQo
bWFrZVdvcmQobm9kZSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMpKQogI2Vsc2UKICAgICAgICAgOiBt
X25vZGUobm9kZSkKLSAgICAgICAgLCBtX2VuY29kZWRXb3JkKHVzZUtpbmQpCisgICAgICAgICwg
bV9lbmNvZGVkV29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCiAjZW5kaWYKICAg
ICB7CiAgICAgfQpAQCAtODEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb2RlKE5v
ZGUqIG5vZGUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdv
cmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0g
bWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygpKTsKICNlbHNlCiAgICAgICAg
IG1fbm9kZSA9IG5vZGU7CiAjZW5kaWYKQEAgLTkxLDExICs3MSwxMiBAQCBwdWJsaWM6CiAgICAg
ewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2Rl
ZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkpOwotICAgICAgICBBU1NFUlQobWFza2VkIDwg
TGFzdFVzZUtpbmQpOwotICAgICAgICBVc2VLaW5kIHJlc3VsdCA9IHN0YXRpY19jYXN0PFVzZUtp
bmQ+KG1hc2tlZCk7CisgICAgICAgIHVuc2lnbmVkIHNoaWZ0ZWQgPSBtYXNrZWQgPj4gMTsKICNl
bHNlCi0gICAgICAgIFVzZUtpbmQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VXNlS2luZD4obV9lbmNv
ZGVkV29yZCk7CisgICAgICAgIHVuc2lnbmVkIHNoaWZ0ZWQgPSBzdGF0aWNfY2FzdDxVc2VLaW5k
PihtX2VuY29kZWRXb3JkKSA+PiAxCiAjZW5kaWYKKyAgICAgICAgQVNTRVJUKHNoaWZ0ZWQgPCBM
YXN0VXNlS2luZCk7CisgICAgICAgIFVzZUtpbmQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VXNlS2lu
ZD4oc2hpZnRlZCk7CiAgICAgICAgIEFTU0VSVChub2RlKCkgfHwgcmVzdWx0ID09IFVudHlwZWRV
c2UpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTEwOCwxMSArODksMzggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCk7Cisg
ICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQsIHByb29mU3Rh
dHVzKCkpOworI2Vsc2UKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQs
IHByb29mU3RhdHVzKCkpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIFByb29mU3RhdHVzIHBy
b29mU3RhdHVzVW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9vZlN0
YXR1c0ZvcklzUHJvdmVkKG1fZW5jb2RlZFdvcmQgJiAxKTsKKyAgICB9CisgICAgUHJvb2ZTdGF0
dXMgcHJvb2ZTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7Cisg
ICAgICAgIHJldHVybiBwcm9vZlN0YXR1c1VuY2hlY2tlZCgpOworICAgIH0KKyAgICB2b2lkIHNl
dFByb29mU3RhdHVzKFByb29mU3RhdHVzIHByb29mU3RhdHVzKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG5vZGUoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9
IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CiAjZWxzZQotICAgICAg
ICBtX2VuY29kZWRXb3JkID0gdXNlS2luZDsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOwogI2VuZGlmCiAgICAgfQorICAgIGJvb2wgaXNQ
cm92ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb29mU3RhdHVzKCkgPT0gSXNQ
cm92ZWQ7CisgICAgfQorICAgIGJvb2wgbmVlZHNDaGVjaygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0NoZWNrOworICAgIH0KICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2RlKCk7IH0KICAgICAKQEAgLTE0MCwxOSAr
MTQ4LDI0IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAg
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVy
biA0OyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNTsgfQogICAgIAot
ICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5k
KQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VL
aW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VSVChzaXpl
b2Yobm9kZSkgPT0gOCk7CiAgICAgICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0
ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAg
ICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAg
ICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0
dXJuIHNoaWZ0ZWRWYWx1ZSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCk7CisgICAg
ICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMSkgPD0g
KDEgPDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVz
KTsKICAgICB9CiAgICAgCiAjZWxzZQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoVXNl
S2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICB7CisgICAgICAgIHJl
dHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92
ZWQocHJvb2ZTdGF0dXMpOworICAgIH0KKyAgICAKICAgICBOb2RlKiBtX25vZGU7CiAjZW5kaWYK
ICAgICAvLyBPbiA2NC1iaXQgdGhpcyBob2xkcyBib3RoIHRoZSBwb2ludGVyIGFuZCB0aGUgdXNl
IGtpbmQsIHdoaWxlIG9uIDMyLWJpdAo=
</data>
<flag name="review"
          id="211302"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>