<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9Vk2P0zAQ_TXpxWqVOs2mPeSwsKzggpBA4ogce5IYHLvYTrvl1_OclN0uuxJCfFRpUn_MzJs3b5w2Tp1qud9L56kbtSKjLYXl3lNLfjnQ0OChrY5aGP2NPAtj11GIgQnWCMVafbfUkbXOs9gTnsa4o7Ydk05RVlxn-U2WX2dX-fmah7zQVppREcuKlyF6GGTFq_PidMfkKCO7dY6xrHoxTzJ8MJPxrbaR2YzvHq-lz_AJpiux35NV2BiiSiiK6-g-nQPxbbJMV_HEthEekG7OXgzZLvYwmDezh91ZdXOJNk3dR5rDzC4ehUigpxD3s8nN_e9nmZrub9qZ3JnrI3liSNBoQoYvsaQD8xRGE0khyP9gvbg-Z8K3z1D1t-vyb3l_jvEPiVPZCwuts4Z6cdBu9IntAA5pKsdlVyT9w8Uc5SpnilKegTk7bQ1RRBoIOGIvAMYp3Wp4nkwS3Kt8xd66Ywpw6eaojUH4i1CKRcfytE_bEAkd6GZxzAVIowunTLSR5s6UAq5gi9lzERDzScq40PoxnphKuXs3_pS-CLO3iZq0PZxsFDLq5P-ErveeZHzk-J13jWjMaQIdmXIUUOgKNIgvoIZsoATsKLxlfdI2lNAAALUCkp4k8YN2AXRun_jWdzA_QfZfRw2ToDsLSqUAxTi6AMglMazYGzv3x154YBwN-luKQMklqJLIah4cKQ2MArz_1j-pRr_oBCD7dZ_985547Y50IP-kgIFomBWdNOFHc08iQXYD3iSIwzqy5IVhusXLQ_YoYvTCBrTMIKJGh6TyuBB0Y-iRcN4TsT7GfUi58FtcnVONM3HlPEi6_Ybv14P7eCjvGr9QdaF2xU4sxBh75-vQymXXL0OHRiP5hRajN_VP7nTsx2Yl3YCBMYcfD7z-3GfIGEMdwkgBP0q-LapFX1dKCF41O17xppWbstpKWWw3RSNbwbelWBjRkAl1Vr7IOJcGfbKMWkH9PCtvFn8OQdc85-s153xdrNd5uRLVZrfbtEWZb8pNRVfZJqdBaLNKfhJVC19PLpuxC1g0Gq_vh0URUvMQTYiBMOpo6Hf-EiQxX_wVOCKj6Ty8PB_n8zBJEfV2UIt_OBPDYsqwntL7DnQyoCI>52837</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            cppcoreguidelines-prefer-member-initializer: bad fix-it with for initializer depending on other statements
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          sfc-gh-sgiesecke
      </td>
    </tr>
</table>

<pre>
    cppcoreguidelines-prefer-member-initializer suggests a bad fix-it for the following code:
```
#include <string>

struct Foo  {
    Foo(int n) {
        m_str.append(std::to_string(n));
        m_bar = m_str.length(); 
    }

    std::string m_str;
    int m_bar;
};

```

If the fix-it were applied, this resulted in:
```
#include <string>

struct Foo  {
    Foo(int n) : m_bar(m_str.length()) {
        m_str.append(std::to_string(n));
        
    }

    std::string m_str;
    int m_bar;
};
```

This changes behaviour, since the initializer for `m_bar` depends on the statement that modifies `m_str`. Now, `m_bar` will be initialized to 0, instead of the length of `m_str` after the call to `append`.

This is pretty dangerous behaviour, as the change is syntactically correct.

Probably, it doesn't make sense to warn here (by default), since a proper fix may require significant refactoring. In this particular case, of course, we could do:
```
#include <string>

struct Foo  {
    Foo(int n) : m_str(std::to_string(n)), m_bar(m_str.length()) {}

    std::string m_str;
    int m_bar;
};
```
However, it doesn't seem that the rule could determine in general if such a transformation is possible.

See https://godbolt.org/z/qvoWv5xbr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VU1v2zgQ_TXyhbAhU5YVHXRImw22l8UCXWCPBUWOJLYU6ZKUHffX91FyE6cJUBRoa8iS-DEzb97ME1unzo08HKTz1E9akdGWwvrgqSO_Hmls8dBWRy2M_kKehanvKcTABGuFYp1-WOvIOudZHAhPY9xJ255JpygrbrP8Lstvs31-uZYhL7SVZlLEsuJtiB4GWfHXZXG-Y3KSkd07x1hWvVkmGX6YyfiNtpHZjNfP19Jv_ADTjTgcyCpsDFElFMVtdB8ugfhNskxX8cK2FR6Q7i5eDNk-DjBYNrOn3Vl1d402TT1GWsIsLp6FSKDnEI-zyc3j-6tMzfd33ULuwvWJPDEkaDQhw7dY0oF5CpOJpBDkT7Be3F4y4TevUPWr6_J7eX-N8f8Sp3IQFr3OWhrEUbvJJ7YDOKS5HNeqSP0PF0uUfc4UpTwDc3beGqKINBJwxEEAjFO60_A8myS4-3zD_nGnFODazUkbg_BXoRSLjuVpn7YhEhToluZYCpBGV06Z6CItypQCrmCL2UsREPNFyrgg_RjPTKXcvZu-S1-ExdtMTdoezjYKGXXyf4bqvScZnzn-17tWtOY8g45MOQoodAUaxCdQQzZQAnYS3rIh9TY6oQUA6gRaem6Jb7QLoHOHxLd-gPkZbf950jAJuregVApQjE8XALnUDBv2zi76OAgPjJOBvqUIlFyCKomslsGJ0sAowPtj-kk1-oESgOzHOvvtmvjbnehI_kUBA9G4dHTqCT-ZRxIJbTfiJEEc1pMlLwzTHQ4POaCI0QsbIJlRRA2FpPK4EHRr6FnjvCdiQ4yHkHLh97h6p1pn4sZ5kHT_Bf_PR_f_sXxo_Uo1haqLWqyijoZ-5kxL1bg6y04aOkqCvhb4IujEJQA7pOufRB1WkzfNd0jhZGo30o0YGHP89gAK9xEKwVCHMFHAS8lvimo1NLnseL3Pq66uiorajvNalV3RVuW-FnVVrYxoyYQmK99knEsDCa6jVhAWz8q7lW54zrdbzvm22G7zciOqXV3vuqLMd-Wuon22y2kU2mwSkMThyjczpnbqAxaNxrn-tChCUhXRHA_-xRQH55vQyXU_rEOPDxjJT7Sa82jmJL4CuQOKCQ">