<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/64077>64077</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            MinGW-clang: Converting constructor of class with no-unqiue-address members overwrites last byte with zeroes 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang,
            platform:windows
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          crtrott
      </td>
    </tr>
</table>

<pre>
    While implementing `mdspan` I ran into an issue during MinGW CI. I reproduced this standalone on GodBolt: https://godbolt.org/z/KK8aj5bs7

The related change revision is found here: https://reviews.llvm.org/D154367

Shortish version, you have something like this:

```c++
template<class T, class M, class A>
class mdspan {
    public:
  mdspan() = default;
  mdspan(const mdspan&) = default;
  mdspan(T* ptr_, M map_, A acc_):ptr(ptr_),map(map_),acc(acc_) {}
  template<class OT, class OM, class OA>
  mdspan(const mdspan<OT, OM, OA>& other):ptr(other.ptr), map(other.map), acc(other.acc) {}

 [[no_unique_address]] T* ptr;
  [[no_unique_address]] M map;
 [[no_unique_address]] A acc;
};
```

If you now do `mdspan<const T, M2, A2>(mdspan<T, M1, A1>);` where M1, A1 and A2 are empty, but M2 is not, and A1->A2 happens via a conversion operator in A1, not a converting constructor in A2 the last byte of `ptr` gets zeroed out.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVEFv4zgP_TX0hUjg0LHjHHxwk8mgGBQ9fAXmWMgWE2s-W_JIcoLOr19ITtPMdnewQBBT1CP59CRSOKdOmrmC_AHyfSIm3xlbtdZb433SGPlWfe9Uz6iGseeBtVf6hFCkg3Sj0FCk-IhWaFTaGwxf5yZGOdmAe1L663fcPS4DiEdr5NSyRN8ph84LLUVvNKPR-NXIB9N7yGrsvB8dZDXQAehwMrIxvV8aewI6_AI6fPtWih954zaQ7iGt5_-XjtFyLzxLbDuhT2F5Vk6ZQAmPZtISO7b8uULA8cUt-_48XMvsV_k6K34r8L_OWK9ch2e2ISvQDt_MhJ04MzozsO_CiXv1f47nC-nvwqFI518L9BB-0et5GANnyHZtL5zDl5B2Np8-zBqyL3PAvJ61R9hc0yAijlPTq_ZWFa8goBJoi5DtUfJRTEHih0-Q1mjnb8viP0S8ANU4evsaWD7hIMZo1Sja9hVoC1k9egtUzpgt0G4QI1A5I8NatC1QecXHw2z273U-CfN8p8zznTTPH9r823my3Rw8h80BVKDxHdt7ptGxjHaghzPf2Rvt6J1Zz95o_079SiW204M2r5NWPyd-FVJadg7yPeR7fBfvTtg_B0SBP9B_Bsc7uIEDs5v9_gjvuT4e4zvW5oLS3HV2tptVjNo9UbxditqVN8S8t4p7q7i3DcWKFC-h125bKLTEmlBYRh5G_xbczeTxiUJ3auOjtAG0WkD2pSbsxDiydnhWAgW2Rl_7Ds3IVnhjUelQlHYh_AaJ4ykSt1P7jiL0HWMvnMfmzTOaYzhnuIAixRN7h7_YGpZoJr-81yaRVSa32VYkXK2KbUqrbL0tk67KRc4ltytm4qZcb7aNaEpKxbYRZZqXlKiKUsrSDa1X-Xqdl8uUVmvilpuCpUg3BaxTHoTqb2MniZOzKtbpZpP0ouHexalM1PZCn4DCFQBR6IujsQNk9UVpaS4ubOX7xFYh1aKZTg7Waa-c_5hpiVe-5yrO48WcL6tx98-SmeO1uS7Kd6jNYtI_1cSL6zPDgYeGrUNzZnuxyrO70zbGRDkdJpPtq7-Nc-W7qVm2ZgA6BHbXz2K05ge3HugQdXBAhyjFXwEAAP__oyAJTA">