<?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>173622</bug_id>
          
          <creation_ts>2017-06-20 15:39:53 -0700</creation_ts>
          <short_desc>reinterpret_cast does not evaluate to constexpr</short_desc>
          <delta_ts>2017-10-16 19:41:12 -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>bmalloc</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143310</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daewoong Jang">daewoong.jang</reporter>
          <assigned_to name="Daewoong Jang">daewoong.jang</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321262</commentid>
    <comment_count>0</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-20 15:39:53 -0700</bug_when>
    <thetext>MSVC does not evaluate reinterpret_cast as a constant expression.
This change is needed for supporting bmalloc on Windows(https://bugs.webkit.org/show_bug.cgi?id=143310).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321264</commentid>
    <comment_count>1</comment_count>
      <attachid>313445</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-20 15:41:45 -0700</bug_when>
    <thetext>Created attachment 313445
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321276</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-20 15:56:44 -0700</bug_when>
    <thetext>Attachment 313445 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Algorithm.h:55:  bitwise_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321643</commentid>
    <comment_count>3</comment_count>
      <attachid>313554</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-21 15:10:30 -0700</bug_when>
    <thetext>Created attachment 313554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321645</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-21 15:13:22 -0700</bug_when>
    <thetext>Attachment 313554 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Algorithm.h:56:  bitwise_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321816</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-22 03:02:55 -0700</bug_when>
    <thetext>IIRC, std::memcpy is not constexpr in C++14. And reinterpret_cast is so too.
Thus, we cannot use this thing as constexpr.

I think we should prepare two versions of this function by overriding.
One for T*, and one for T.
And in T case, we do not perform reinterpret_cast&lt;&gt;. Instead, we will use static_cast&lt;uintptr_t&gt;(). In that case, we can make it as constexpr.
Because this roundUpToMultipleOf is sometimes used for size_t, this enforces compilers to calculate constant values for that case (with constant values).

And in the case of T*, we will just use reinterpret_cast&lt;&gt;. And we do not annotate constexpr for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321817</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-22 03:03:49 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; IIRC, std::memcpy is not constexpr in C++14. And reinterpret_cast is so too.
&gt; Thus, we cannot use this thing as constexpr.

We need to wait http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0202r0.html integration to the spec.

&gt; 
&gt; I think we should prepare two versions of this function by overriding.
&gt; One for T*, and one for T.
&gt; And in T case, we do not perform reinterpret_cast&lt;&gt;. Instead, we will use
&gt; static_cast&lt;uintptr_t&gt;(). In that case, we can make it as constexpr.
&gt; Because this roundUpToMultipleOf is sometimes used for size_t, this enforces
&gt; compilers to calculate constant values for that case (with constant values).
&gt; 
&gt; And in the case of T*, we will just use reinterpret_cast&lt;&gt;. And we do not
&gt; annotate constexpr for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321839</commentid>
    <comment_count>7</comment_count>
      <attachid>313610</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-22 05:44:20 -0700</bug_when>
    <thetext>Created attachment 313610
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321855</commentid>
    <comment_count>8</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-22 07:03:32 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; IIRC, std::memcpy is not constexpr in C++14. And reinterpret_cast is so too.
&gt; Thus, we cannot use this thing as constexpr.
&gt; 
&gt; I think we should prepare two versions of this function by overriding.
&gt; One for T*, and one for T.
&gt; And in T case, we do not perform reinterpret_cast&lt;&gt;. Instead, we will use
&gt; static_cast&lt;uintptr_t&gt;(). In that case, we can make it as constexpr.
&gt; Because this roundUpToMultipleOf is sometimes used for size_t, this enforces
&gt; compilers to calculate constant values for that case (with constant values).
&gt; 
&gt; And in the case of T*, we will just use reinterpret_cast&lt;&gt;. And we do not
&gt; annotate constexpr for that.

I updated the patch as you suggested. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321917</commentid>
    <comment_count>9</comment_count>
      <attachid>313610</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-22 09:11:31 -0700</bug_when>
    <thetext>Comment on attachment 313610
patch

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

&gt; We need to wait http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0202r0.html integration to the spec.

Unfortunately the committee is split on whether memcpy should be constexpr. I think http://wg21.link/p0476 may get you what you want... if the committee agrees to constexpr.

&gt; Source/bmalloc/bmalloc/Algorithm.h:51
&gt;  template&lt;typename T&gt; inline constexpr T mask(T value, uintptr_t mask)

Which types do we expect to get for T here? Are they all valid? Is widening or narrowing OK? I would use enable_if to check invariants are met.

&gt; Source/bmalloc/bmalloc/Algorithm.h:71
&gt;  template&lt;typename T&gt; inline T roundUpToMultipleOf(size_t divisor, T x)

Ditto on T.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321929</commentid>
    <comment_count>10</comment_count>
      <attachid>313610</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-06-22 09:39:39 -0700</bug_when>
    <thetext>Comment on attachment 313610
patch

What function requires mask() or roundUpToMultipleOf to be constexpr? Can we make them not constexpr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322094</commentid>
    <comment_count>11</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-06-22 15:40:33 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #10)
&gt; Comment on attachment 313610 [details]
&gt; patch
&gt; 
&gt; What function requires mask() or roundUpToMultipleOf to be constexpr? Can we
&gt; make them not constexpr?

It seems that constexpr at roundUpToMultipleOf() could be removed, but mask() needs to be constexpr due to Sizes::maskSizeClass(). And reinterpret_cast still couldn&apos;t be used as MSVC is complaining that &quot;cannot convert from std::size_t to uintptr_t&quot;. If you think the constexpr of roundUpToMultipleOf() should be removed, I&apos;ll update the patch.

&gt;&gt; Source/bmalloc/bmalloc/Algorithm.h:51
&gt;&gt;  template&lt;typename T&gt; inline constexpr T mask(T value, uintptr_t mask)

&gt;Which types do we expect to get for T here? Are they all valid? Is widening or &gt;narrowing OK? I would use enable_if to check invariants are met.

&gt;&gt; Source/bmalloc/bmalloc/Algorithm.h:71
&gt;&gt;  template&lt;typename T&gt; inline T roundUpToMultipleOf(size_t divisor, T x)

&gt;Ditto on T.

Regarding Bastien&apos;s review, could you let me know which types are valid and which are not? 

Thank you for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325537</commentid>
    <comment_count>12</comment_count>
      <attachid>313610</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-04 23:10:58 -0700</bug_when>
    <thetext>Comment on attachment 313610
patch

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

&gt;&gt;&gt; Source/bmalloc/bmalloc/Algorithm.h:51
&gt;&gt;&gt;  template&lt;typename T&gt; inline constexpr T mask(T value, uintptr_t mask)
&gt;&gt; 
&gt;&gt; Which types do we expect to get for T here? Are they all valid? Is widening or narrowing OK? I would use enable_if to check invariants are met.
&gt; 
&gt; 

The original code using reinterpret_cast requires that it does not cause any widening and narrowing.
Let&apos;s add `static_assert(sizeof(T) == sizeof(uintptr_t), &quot;&quot;);` in this function.

&gt;&gt;&gt; Source/bmalloc/bmalloc/Algorithm.h:71
&gt;&gt;&gt;  template&lt;typename T&gt; inline T roundUpToMultipleOf(size_t divisor, T x)
&gt;&gt; 
&gt;&gt; Ditto on T.
&gt; 
&gt; 

Ditto. Let&apos;s add `static_assert(sizeof(T) == sizeof(uintptr_t), &quot;&quot;);`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325803</commentid>
    <comment_count>13</comment_count>
      <attachid>314660</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-07-05 15:58:01 -0700</bug_when>
    <thetext>Created attachment 314660
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325835</commentid>
    <comment_count>14</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-07-05 17:00:58 -0700</bug_when>
    <thetext>I think the patch is got a lot better. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325867</commentid>
    <comment_count>15</comment_count>
      <attachid>314660</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-05 19:02:07 -0700</bug_when>
    <thetext>Comment on attachment 314660
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325889</commentid>
    <comment_count>16</comment_count>
      <attachid>314660</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-05 19:30:43 -0700</bug_when>
    <thetext>Comment on attachment 314660
patch

Clearing flags on attachment: 314660

Committed r219181: &lt;http://trac.webkit.org/changeset/219181&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325890</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-05 19:30:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360905</commentid>
    <comment_count>18</comment_count>
      <attachid>314660</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-16 12:51:11 -0700</bug_when>
    <thetext>Comment on attachment 314660
patch

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

&gt; Source/bmalloc/bmalloc/Algorithm.h:53
&gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);

What is the purpose of this assertion?

&gt; Source/bmalloc/bmalloc/Algorithm.h:75
&gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);

What is the purpose of this assertion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361013</commentid>
    <comment_count>19</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-10-16 16:43:20 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #18)
&gt; Comment on attachment 314660 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314660&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:53
&gt; &gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);
&gt; 
&gt; What is the purpose of this assertion?
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:75
&gt; &gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);
&gt; 
&gt; What is the purpose of this assertion?

Please refer to comment #9 and #12.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361069</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-16 19:41:12 -0700</bug_when>
    <thetext>(In reply to Daewoong Jang from comment #19)
&gt; (In reply to Filip Pizlo from comment #18)
&gt; &gt; Comment on attachment 314660 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=314660&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:53
&gt; &gt; &gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);
&gt; &gt; 
&gt; &gt; What is the purpose of this assertion?
&gt; &gt; 
&gt; &gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:75
&gt; &gt; &gt; +    static_assert(sizeof(T) == sizeof(uintptr_t), &quot;sizeof(T) must be equal to sizeof(uintptr_t).&quot;);
&gt; &gt; 
&gt; &gt; What is the purpose of this assertion?
&gt; 
&gt; Please refer to comment #9 and #12.

Thanks. 

In the future, it would be useful to put information about this in the ChangeLog.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313445</attachid>
            <date>2017-06-20 15:41:45 -0700</date>
            <delta_ts>2017-06-21 15:10:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug173622.diff</filename>
            <type>text/plain</type>
            <size>2157</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIwICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFJlcGxhY2Ug
cmVpbnRlcnByZXRfY2FzdCB3aXRoIGJpdHdpc2VfY2FzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzYyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0aG0uaDoKKyAgICAg
ICAgKGJtYWxsb2M6OmJpdHdpc2VfY2FzdCk6IENvcGllZCBmcm9tIHd0Zi9TdGRMaWJFeHRyYXMu
aC4KKyAgICAgICAgKGJtYWxsb2M6Om1hc2spOgorICAgICAgICAoYm1hbGxvYzo6cm91bmRVcFRv
TXVsdGlwbGVPZik6CisKIDIwMTctMDYtMTAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZlcnRlZCByMjE4MDU2IGJlY2F1c2UgaXQgbWFkZSB0aGUgSURFIHJl
aW5kZXggY29uc3RhbnRseS4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGht
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2
aXNpb24gMjE4NjA5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IGNvbnN0ZXhwciBUCiAgICAgcmV0dXJuIGEgPCBiID8gYSA6IGI7CiB9CiAKKy8qCisgKiBDKysn
cyBpZGVhIG9mIGEgcmVpbnRlcnByZXRfY2FzdCBsYWNrcyBzdWZmaWNpZW50IGNvam9uZXMuCisg
Ki8KK3RlbXBsYXRlPHR5cGVuYW1lIFRvVHlwZSwgdHlwZW5hbWUgRnJvbVR5cGU+CitpbmxpbmUg
VG9UeXBlIGJpdHdpc2VfY2FzdChGcm9tVHlwZSBmcm9tKQoreworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKEZyb21UeXBlKSA9PSBzaXplb2YoVG9UeXBlKSwgImJpdHdpc2VfY2FzdCBzaXplIG9m
IEZyb21UeXBlIGFuZCBUb1R5cGUgbXVzdCBiZSBlcXVhbCEiKTsKKyAgICB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9jb25zdDxUb1R5cGU+Ojp0eXBlIHRvIHsgfTsKKyAgICBzdGQ6Om1lbWNweSgmdG8s
ICZmcm9tLCBzaXplb2YodG8pKTsKKyAgICByZXR1cm4gdG87Cit9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBjb25zdGV4cHIgVCBtYXNrKFQgdmFsdWUsIHVpbnRwdHJfdCBtYXNrKQog
ewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih2YWx1ZSkgJiBtYXNrKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAmIG1hc2spOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgY29uc3RleHByIGJvb2wgdGVzdChUIHZhbHVlLCB1aW50cHRyX3QgbWFzaykKQEAg
LTY2LDcgKzc4LDcgQEAgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzUG93ZXJPZlR3byhzaXplXwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3Qg
ZGl2aXNvciwgVCB4KQogewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGRpdmlzb3IpKTsKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHgpICsgKGRpdmlzb3IgLSAxKSkgJiB+KGRpdmlzb3IgLSAxKSk7CisgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxUPigoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oeCkgKyAoZGl2aXNvciAtIDEpKSAm
IH4oZGl2aXNvciAtIDEpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1l
IFQ+IGlubGluZSBjb25zdGV4cHIgVCByb3VuZFVwVG9NdWx0aXBsZU9mKFQgeCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313554</attachid>
            <date>2017-06-21 15:10:30 -0700</date>
            <delta_ts>2017-06-22 05:44:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug173622.diff</filename>
            <type>text/plain</type>
            <size>2319</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTIwICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFJlcGxhY2Ug
cmVpbnRlcnByZXRfY2FzdCB3aXRoIGJpdHdpc2VfY2FzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzYyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYm1hbGxvYy9BbGdvcml0aG0uaDoKKyAgICAg
ICAgKGJtYWxsb2M6OmJpdHdpc2VfY2FzdCk6IENvcGllZCBmcm9tIHd0Zi9TdGRMaWJFeHRyYXMu
aC4KKyAgICAgICAgKGJtYWxsb2M6Om1hc2spOgorICAgICAgICAoYm1hbGxvYzo6cm91bmRVcFRv
TXVsdGlwbGVPZik6CisKIDIwMTctMDYtMTAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZlcnRlZCByMjE4MDU2IGJlY2F1c2UgaXQgbWFkZSB0aGUgSURFIHJl
aW5kZXggY29uc3RhbnRseS4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGht
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2
aXNpb24gMjE4NjA5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0cmluZz4KICNp
bmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8Y2hyb25v
PgpAQCAtNDgsOSArNDksMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhw
ciBUCiAgICAgcmV0dXJuIGEgPCBiID8gYSA6IGI7CiB9CiAKKy8qCisgKiBDKysncyBpZGVhIG9m
IGEgcmVpbnRlcnByZXRfY2FzdCBsYWNrcyBzdWZmaWNpZW50IGNvam9uZXMuCisgKi8KK3RlbXBs
YXRlPHR5cGVuYW1lIFRvVHlwZSwgdHlwZW5hbWUgRnJvbVR5cGU+CitpbmxpbmUgVG9UeXBlIGJp
dHdpc2VfY2FzdChGcm9tVHlwZSBmcm9tKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEZy
b21UeXBlKSA9PSBzaXplb2YoVG9UeXBlKSwgImJpdHdpc2VfY2FzdCBzaXplIG9mIEZyb21UeXBl
IGFuZCBUb1R5cGUgbXVzdCBiZSBlcXVhbCEiKTsKKyAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
b25zdDxUb1R5cGU+Ojp0eXBlIHRvIHsgfTsKKyAgICBzdGQ6Om1lbWNweSgmdG8sICZmcm9tLCBz
aXplb2YodG8pKTsKKyAgICByZXR1cm4gdG87Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBjb25zdGV4cHIgVCBtYXNrKFQgdmFsdWUsIHVpbnRwdHJfdCBtYXNrKQogewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSkgJiBtYXNrKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKSAmIG1hc2spOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgdGVzdChUIHZhbHVlLCB1aW50cHRyX3QgbWFzaykKQEAgLTY2LDcgKzc5
LDcgQEAgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzUG93ZXJPZlR3byhzaXplXwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgZGl2aXNvciwg
VCB4KQogewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGRpdmlzb3IpKTsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxUPigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpICsgKGRp
dmlzb3IgLSAxKSkgJiB+KGRpdmlzb3IgLSAxKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxU
PigoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oeCkgKyAoZGl2aXNvciAtIDEpKSAmIH4oZGl2aXNv
ciAtIDEpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubGlu
ZSBjb25zdGV4cHIgVCByb3VuZFVwVG9NdWx0aXBsZU9mKFQgeCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313610</attachid>
            <date>2017-06-22 05:44:20 -0700</date>
            <delta_ts>2017-07-05 15:58:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug173622.diff</filename>
            <type>text/plain</type>
            <size>2459</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODY5MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA2LTIyICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3QgZG9lcyBub3QgZXZhbHVhdGUgdG8gY29uc3RhbnQgZXhwcmVzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjIyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibWFsbG9jL0FsZ29y
aXRobS5oOgorICAgICAgICAoYm1hbGxvYzo6bWFzayk6CisgICAgICAgIChibWFsbG9jOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKToKKwogMjAxNy0wNi0xMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmVydGVkIHIyMTgwNTYgYmVjYXVzZSBpdCBtYWRlIHRoZSBJ
REUgcmVpbmRleCBjb25zdGFudGx5LgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdv
cml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5o
CShyZXZpc2lvbiAyMTg2NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgY29uc3RleHByIFQKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhw
ciBUIG1hc2soVCB2YWx1ZSwgdWludHB0cl90IG1hc2spCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAmIG1hc2spOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAm
IG1hc2spOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogbWFzayhUKiB2YWx1
ZSwgdWludHB0cl90IG1hc2spCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgJiBtYXNrKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIHRlc3QoVCB2YWx1ZSwgdWludHB0cl90
IG1hc2spCkBAIC02NiwxMyArNzEsMjUgQEAgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzUG93ZXJP
ZlR3byhzaXplXwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlw
bGVPZihzaXplX3QgZGl2aXNvciwgVCB4KQogewogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGRp
dmlzb3IpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHgpICsgKGRpdmlzb3IgLSAxKSkgJiB+KGRpdmlzb3IgLSAxKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHgpICsgKGRpdmlz
b3IgLSAxKSkgJiB+KGRpdmlzb3IgLSAxKSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBkaXZpc29y
LCB0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIFQgcm91bmRVcFRvTXVsdGlwbGVPZihUIHgp
CiB7CiAgICAgc3RhdGljX2Fzc2VydChpc1Bvd2VyT2ZUd28oZGl2aXNvciksICInZGl2aXNvcicg
bXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVP
ZihkaXZpc29yLCB4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJvdW5k
VXBUb011bHRpcGxlT2Yoc2l6ZV90IGRpdmlzb3IsIFQqIHgpCit7CisgICAgQkFTU0VSVChpc1Bv
d2VyT2ZUd28oZGl2aXNvcikpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpICsgKGRpdmlzb3IgLSAxKSkgJiB+KGRpdmlzb3Ig
LSAxKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUg
VCogcm91bmRVcFRvTXVsdGlwbGVPZihUKiB4KQoreworICAgIHN0YXRpY19hc3NlcnQoaXNQb3dl
ck9mVHdvKGRpdmlzb3IpLCAiJ2Rpdmlzb3InIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Cisg
ICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxlT2YoZGl2aXNvciwgeCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBUIHJvdW5kRG93blRvTXVsdGlwbGVPZihzaXplX3QgZGl2aXNv
ciwgVCB4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314660</attachid>
            <date>2017-07-05 15:58:01 -0700</date>
            <delta_ts>2017-07-05 19:30:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug173622.diff</filename>
            <type>text/plain</type>
            <size>2639</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTE2MikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA3LTA1ICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3QgZG9lcyBub3QgZXZhbHVhdGUgdG8gY29uc3RleHByCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6Cisg
ICAgICAgIChibWFsbG9jOjptYXNrKToKKyAgICAgICAgKGJtYWxsb2M6OnJvdW5kVXBUb011bHRp
cGxlT2YpOgorCiAyMDE3LTA3LTAzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbWGNvZGVdIEFkZCBhbiBleHBlcmltZW50YWwgc2V0dGluZyB0byBidWlsZCB3aXRo
IGNjYWNoZQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMTkx
NjIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHBy
IFQKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBUIG1hc2soVCB2YWx1
ZSwgdWludHB0cl90IG1hc2spCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAmIG1hc2spOworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpLCAic2l6ZW9mKFQpIG11c3QgYmUgZXF1
YWwgdG8gc2l6ZW9mKHVpbnRwdHJfdCkuIik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpICYgbWFzayk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUKiBtYXNrKFQqIHZhbHVlLCB1aW50cHRyX3QgbWFzaykKK3sKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZh
bHVlKSAmIG1hc2spOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgdGVzdChUIHZhbHVlLCB1aW50cHRyX3QgbWFzaykKQEAgLTY2LDEwICs3MiwyMyBAQCBp
bmxpbmUgY29uc3RleHByIGJvb2wgaXNQb3dlck9mVHdvKHNpemVfCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCByb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29yLCBUIHgpCiB7
CiAgICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oZGl2aXNvcikpOwotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFQ+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oeCkgKyAoZGl2aXNvciAt
IDEpKSAmIH4oZGl2aXNvciAtIDEpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBz
aXplb2YodWludHB0cl90KSwgInNpemVvZihUKSBtdXN0IGJlIGVxdWFsIHRvIHNpemVvZih1aW50
cHRyX3QpLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigoc3RhdGljX2Nhc3Q8dWludHB0
cl90Pih4KSArIChkaXZpc29yIC0gMSkpICYgfihkaXZpc29yIC0gMSkpOworfQorCit0ZW1wbGF0
ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlwbGVP
ZihUIHgpCit7CisgICAgc3RhdGljX2Fzc2VydChpc1Bvd2VyT2ZUd28oZGl2aXNvciksICInZGl2
aXNvcicgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICByZXR1cm4gcm91bmRVcFRvTXVs
dGlwbGVPZihkaXZpc29yLCB4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IHJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZV90IGRpdmlzb3IsIFQqIHgpCit7CisgICAgQkFTU0VS
VChpc1Bvd2VyT2ZUd28oZGl2aXNvcikpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQq
PigocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpICsgKGRpdmlzb3IgLSAxKSkgJiB+KGRp
dmlzb3IgLSAxKSk7CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBp
bmxpbmUgY29uc3RleHByIFQgcm91bmRVcFRvTXVsdGlwbGVPZihUIHgpCit0ZW1wbGF0ZTxzaXpl
X3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5saW5lIFQqIHJvdW5kVXBUb011bHRpcGxlT2YoVCog
eCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KGlzUG93ZXJPZlR3byhkaXZpc29yKSwgIidkaXZpc29y
JyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIHJldHVybiByb3VuZFVwVG9NdWx0aXBs
ZU9mKGRpdmlzb3IsIHgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>