<?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>202096</bug_id>
          
          <creation_ts>2019-09-22 20:33:03 -0700</creation_ts>
          <short_desc>clang-tidy: Fix unnecessary copy/ref churn of for loop variables in WebKit</short_desc>
          <delta_ts>2019-09-25 09:56: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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=202069</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=202090</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="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573227</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-09-22 20:33:03 -0700</bug_when>
    <thetext>Running clang-tidy on WebKit resulted in these potential performance improvements to prevent object copies or reference churn in for loop variables:

Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:514:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto domainName : domains) {
              ^
         const  &amp;
--
Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm:215:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto path : WebCore::PathUtilities::pathsWithShrinkWrappedRects(indicatedRects, 0)) {
              ^
         const  &amp;
--
Source/WebKit/UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm:172:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto suggestion : _suggestions) {
              ^
         const  &amp;
--
Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2491:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto action : actionsToPerform)
              ^
         const  &amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573228</commentid>
    <comment_count>1</comment_count>
      <attachid>379354</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-09-22 20:37:34 -0700</bug_when>
    <thetext>Created attachment 379354
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573229</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-22 20:38:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/55609903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573285</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-09-23 06:43:16 -0700</bug_when>
    <thetext>iOS WK2 EWS test failure (timeout):

fast/scrolling/ios/click-events-after-long-press-during-momentum-scroll-in-main-frame.html

This test failure seems like a recent regression (happening in trunk), not related to this patch:

&lt;https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=fast%2Fscrolling%2Fios%2Fclick-events-after-long-press-during-momentum-scroll-in-main-frame.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573316</commentid>
    <comment_count>4</comment_count>
      <attachid>379354</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-09-23 09:08:47 -0700</bug_when>
    <thetext>Comment on attachment 379354
Patch v1

In all these cases i would just use auto&amp; rather than const auto&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573334</commentid>
    <comment_count>5</comment_count>
      <attachid>379354</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-23 10:05:01 -0700</bug_when>
    <thetext>Comment on attachment 379354
Patch v1

Clearing flags on attachment: 379354

Committed r250239: &lt;https://trac.webkit.org/changeset/250239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573335</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-23 10:05:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573464</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-09-23 16:13:11 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 379354 [details]
&gt; Patch v1
&gt; 
&gt; In all these cases i would just use auto&amp; rather than const auto&amp;.

Why?  You don&apos;t feel `const` adds anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574089</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-09-25 09:56:12 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #7)
&gt; (In reply to Darin Adler from comment #4)
&gt; &gt; In all these cases i would just use auto&amp; rather than const auto&amp;.
&gt; 
&gt; Why?  You don&apos;t feel `const` adds anything?

Generally speaking we could put const in many more places in our C++ on local variables and non-reference arguments. In all those cases the benefit is similar: it will catch mistakes where we accidentally modify something that we don&apos;t intend to. And in all those cases the cost is similar: makes the code more verbose. In other languages like Swift, where it&apos;s easier to define things that are never modified (let vs. var) programmers typically make the other choice. But const in C++ is not the default so we generally don’t use it for simple cases like that. I kind of wish the default was reversed, but this is the language we have.

Here’s an example: Let’s say I am getting a pointer to an object and I plan not to use any non-const functions on it. Typically we don’t use const in a case like that:

    Element* focusedElement = document-&gt;focusedElement();
    if (focusedElement &amp;&amp; focusedElement-&gt;isHappy() &amp;&amp; focusedElement-&gt;isPatient())

We could add additional const, but we don’t because the benefit is small. It could be written like this:

    const Element* const focusedElement = document-&gt;focusedElement();
    if (focusedElement &amp;&amp; focusedElement-&gt;isHappy() &amp;&amp; focusedElement-&gt;isPatient())

But typically it’s not.

In the future I hope that most range-based for loops don&apos;t mention the type at all, and automatically use a type that won&apos;t cause any copying or other changes (like upcasting). Adding this to the language is proposed as N3994 &lt;http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3994.htm&gt; and &lt;http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3853.htm&gt; and I hope will eventually get into C++. The most generic way to do this safely is to use &quot;auto&amp;&amp;&quot;, but in most cases &quot;auto&amp;&quot; works fine and it&apos;s a little bit less exotic looking. Read the rationale in the N3853 document. Until this is available, when I read range-based for statements I see &quot;auto&amp;&quot; and &quot;auto&amp;&amp;&quot; as &quot;almost always right&quot; and also brief. And I see &quot;auto&quot; as &quot;almost always wrong&quot; but also brief.

One other issue: in some of the cases where we are using &quot;const auto&amp;&quot;, the expression on the right side is already const. Typing &quot;const auto&amp;&quot; in a case like this communicates &quot;we will not modify the elements in this loop&quot; but it has no effect on how the code is treated.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379354</attachid>
            <date>2019-09-22 20:37:34 -0700</date>
            <delta_ts>2019-09-23 10:05:01 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-202096-20190922203733.patch</filename>
            <type>text/plain</type>
            <size>4447</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFkNmU2OWEwNDM4MjRlMzc0
MmIxZDg0NTUwZGViNzQzNTBhOWJiNzEuLmI5ZjY5OTI0NjAxNDlkYzZlOTM1OTM5ZGYwNmYzN2Vl
MDkzZmYxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTktMDktMjIgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBjbGFuZy10aWR5OiBGaXggdW5u
ZWNlc3NhcnkgY29weS9yZWYgY2h1cm4gb2YgZm9yIGxvb3AgdmFyaWFibGVzIGluIFdlYktpdAor
ICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAyMDk2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB1bndhbnRlZCBjb3B5aW5nL3JlZiBj
aHVybiBvZiBsb29wIHZhcmlhYmxlcyBieSBtYWtpbmcgdGhlbQorICAgICAgICBjb25zdCByZWZl
cmVuY2VzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNU
b1N0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50
Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHByZXNlbnRhdGlvblJlY3RG
b3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdF0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IF9zaW5nbGVUYXBEaWRSZXNldDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYkRh
dGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbToKKyAgICAgICAgKC1bV0tEYXRhTGlzdFN1
Z2dlc3Rpb25zQ29udHJvbCB0ZXh0U3VnZ2VzdGlvbnNdKToKKwogMjAxOS0wOS0xNyAgRGVhbiBK
YWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSAiU2hvdyBMaW5r
IFByZXZpZXdzIiBhbmQgIkhpZGUgTGluayBQcmV2aWV3cyIgYWN0aW9uIG1lbnVzIGluIHRoZSBw
cmV2aWV3IHBsYXR0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGQ0ZWM4NGM3YzdkMmUxNWI0ZTc4YzAyOWJhMTZmMjI2
NjdkYzIzNjYuLjdlMWYwYWNmM2VkZjhlN2ZhZTk1YjRhY2EzY2FmZGMyMTdkOTM0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtNTExLDcgKzUxMSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0CiBzdGF0aWMgU3RyaW5n
IGRvbWFpbnNUb1N0cmluZyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvIGRvbWFpbk5h
bWUgOiBkb21haW5zKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBkb21haW5OYW1lIDogZG9tYWlu
cykgewogICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFu
dC5tbQppbmRleCA5MTg0YjNmNzBmY2U5OGQzMDY2OGIzM2IwMDllNzAyODY4NGVjNjA5Li5hN2Zh
NTE3ZWNiMjAwM2I3YjViMjFkZTQyYmUxOWY0OTA0NzA2MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpAQCAtMjEy
LDcgKzIxMiw3IEBAIC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xv
c2VzdEluZGljYXRlZFJlY3QKICAgICAgICAgaW5kaWNhdGVkUmVjdHMuYXBwZW5kKHJlY3QpOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byBwYXRoIDogV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGluZGljYXRlZFJlY3RzLCAwKSkgeworICAgIGZvciAo
Y29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlu
a1dyYXBwZWRSZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAgYXV0byBib3VuZGlu
Z1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgaWYgKGJvdW5kaW5nUmVj
dC5jb250YWlucyh0b3VjaExvY2F0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBDR1JlY3RJbnNl
dChbdmlldyBjb252ZXJ0UmVjdDooQ0dSZWN0KWJvdW5kaW5nUmVjdCBmcm9tVmlldzpfdmlldy5n
ZXRBdXRvcmVsZWFzZWQoKV0sIC1wcmVzZW50YXRpb25FbGVtZW50UmVjdFBhZGRpbmcsIC1wcmVz
ZW50YXRpb25FbGVtZW50UmVjdFBhZGRpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggM2U5MjYyNzcy
MzNkZDY1MTllMmY2NTQ0NDI1ZDNlM2FjZjc0ODYxZi4uZTc0ZmFiNjJhZmYyYmY1NGI3YjVjZDJm
NGNmMTg4MTcxMzcxNTc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yNDg4LDcgKzI0ODgsNyBAQCAt
ICh2b2lkKV9zaW5nbGVUYXBEaWRSZXNldDooVUlUYXBHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1
cmVSZWNvZ25pemVyCiAgICAgfQogI2VuZGlmCiAgICAgYXV0byBhY3Rpb25zVG9QZXJmb3JtID0g
c3RkOjpleGNoYW5nZShfYWN0aW9uc1RvUGVyZm9ybUFmdGVyUmVzZXR0aW5nU2luZ2xlVGFwR2Vz
dHVyZVJlY29nbml6ZXIsIHsgfSk7Ci0gICAgZm9yIChhdXRvIGFjdGlvbiA6IGFjdGlvbnNUb1Bl
cmZvcm0pCisgICAgZm9yIChjb25zdCBhdXRvJiBhY3Rpb24gOiBhY3Rpb25zVG9QZXJmb3JtKQog
ICAgICAgICBhY3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MubW0KaW5k
ZXggZDExYTk2ZDVkMmYyMWU1YmE5OTVlMDY2ZGQ4N2YwMjAyNDEzYmUwOS4uYjlkMzMwNjc5NzUw
MTQxZjVjNGVkYmNmN2Y1NDYwYTkwOTMwZGRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3du
SU9TLm1tCkBAIC0xNjksNyArMTY5LDcgQEAgLSAoTlNBcnJheTxXS0RhdGFMaXN0VGV4dFN1Z2dl
c3Rpb24gKj4gKil0ZXh0U3VnZ2VzdGlvbnMKIHsKICAgICBOU011dGFibGVBcnJheSAqc3VnZ2Vz
dGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwogCi0gICAgZm9yIChhdXRvIHN1Z2dlc3Rp
b24gOiBfc3VnZ2VzdGlvbnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN1Z2dlc3Rpb24gOiBf
c3VnZ2VzdGlvbnMpIHsKICAgICAgICAgW3N1Z2dlc3Rpb25zIGFkZE9iamVjdDpbV0tEYXRhTGlz
dFRleHRTdWdnZXN0aW9uIHRleHRTdWdnZXN0aW9uV2l0aElucHV0VGV4dDpzdWdnZXN0aW9uXV07
CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5jb3VudCA9PSAzKQogICAgICAgICAgICAgYnJlYWs7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>