[cfe-dev] Coding style and warning spam: redundant std::move?

James Henderson via cfe-dev cfe-dev at lists.llvm.org
Mon Feb 17 06:46:40 PST 2020


It's worth noting that somebody tried to remove many supposedly-redundant
std::move calls (see
https://github.com/llvm/llvm-project/commit/1c2241a7936bf85aa68aef94bd40c3ba77d8ddf2#diff-7046c45834a9a01f5ea1571c64d347bb),
but this broke most or all the build bots, presumably because of reasons as
outlined, so was reverted.

On Sun, 16 Feb 2020 at 14:07, Whisperity via cfe-dev <cfe-dev at lists.llvm.org>
wrote:

> I apologise, I wrote the example out of my mind without exact details - I
> just remembered that there *are* issues with adding/removing move when you
> want to target multiple compilers. It could be, that in the GCC line it
> works, but older Clangs don't support it, maybe you need two layers of
> template instantiation or return value wrapping for this to break. It's
> been a while since I had the exact case in front of me.
>
> Mehdi AMINI <joker.eph at gmail.com> ezt írta (időpont: 2020. febr. 15.,
> Szo, 21:42):
>
>>
>>
>> On Sat, Feb 15, 2020 at 12:13 PM Whisperity via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> You cannot really *fix* the issue until the minimum required GCC version
>>> for the project is bumped because changing "std::move(Err)" to just "Err"
>>> may (and most likely will) result in compile errors. The following case:
>>>
>>>   struct Something {};
>>>   <T> struct CreateFromMoveable {
>>>     CreateFromMoveable(T&&);
>>>   };
>>>
>>>   CreateFromMoveable<Something> f() {
>>>     Something S;
>>>     // ...
>>>     return S;
>>>   }
>>>
>>> is a hard failure with old GCC, that's why "std::move" is written there.
>>> Once the "std::move" is there, old GCC properly picks up the fact that it
>>> could bind the move ctor in the return.
>>>
>>
>> Seems like this was fixed in gcc5?
>>
>> https://godbolt.org/z/zaDyt6
>>
>> --
>> Mehdi
>>
>>
>>
>>>
>>> For now, you could either fall back to using an older compiler or
>>> disable the warning locally...
>>>
>>>
>>> Nicolai Hähnle via cfe-dev <cfe-dev at lists.llvm.org> ezt írta (időpont:
>>> 2020. febr. 15., Szo, 20:35):
>>>
>>>> Hi all,
>>>>
>>>> GCC 9 introduced a new warning, -Wredundant-move, which is enabled by
>>>> default when building LLVM and produces what looks like at least
>>>> thousands of hits.
>>>>
>>>> https://reviews.llvm.org/D74672 is a sample of the kind of changes
>>>> pointed out by this warning, more explanations are in this blog post:
>>>>
>>>> https://developers.redhat.com/blog/2019/04/12/understanding-when-not-to-stdmove-in-c/
>>>>
>>>> What do people think should be done here?
>>>>
>>>> 1. Disable -Wredundant-move?
>>>> 2. Fix it all (seems daunting to do manually)?
>>>> 3. Encourage clang/clang-tidy developers to add this warning and add a
>>>> clang-tidy rule to fix it automatically?
>>>>
>>>> My personal opinion is that while the review linked above should be
>>>> committed, it's ultimately a drop in the ocean and #3 is the way to
>>>> go.
>>>>
>>>> In the meantime, I'm certainly going to disable -Wredundant-move
>>>> locally, but should that also be done by default for gcc in the
>>>> CMakeLists.txt?
>>>>
>>>> Cheers,
>>>> Nicolai
>>>> --
>>>> Lerne, wie die Welt wirklich ist,
>>>> aber vergiss niemals, wie sie sein sollte.
>>>> _______________________________________________
>>>> cfe-dev mailing list
>>>> cfe-dev at lists.llvm.org
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200217/92c9f742/attachment-0001.html>


More information about the cfe-dev mailing list