[cfe-dev] warn_unused_result attribute on class definition not applying to methods declared in that class

David Blaikie via cfe-dev cfe-dev at lists.llvm.org
Tue Apr 18 09:56:52 PDT 2017


*nod* maybe it could be filtered to only suppress that when the result is a
T& but not a T value. That'd catch the APInt::trunc case, but not produce
false positives for assignment operators..

On Tue, Apr 18, 2017 at 12:05 AM Craig Topper via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> I think this is because of the behavior outlined here.
>
>   /// \brief Returns true if this function or its return type has the
>   /// warn_unused_result attribute. If the return type has the attribute
> and
>   /// this function is a method of the return type's class, then false
> will be
>   /// returned to avoid spurious warnings on member methods such as
> assignment
>   /// operators.
>   bool hasUnusedResultAttr() const { return getUnusedResultAttr() !=
> nullptr; }
>
> ~Craig
>
> On Mon, Apr 17, 2017 at 11:48 PM, Craig Topper <craig.topper at gmail.com>
> wrote:
>
>> It seems if warn_unused_result is put on a class definition it doesn't
>> apply to any of the methods in that class that return the class type?
>>
>> This test should generate 2 warnings but only generates one.
>>
>> https://godbolt.org/g/kImv9k
>>
>> The ArrayRef and APInt classes both do this. I accidentally created a
>> case where I didn't consume the result of APInt::trunc and received no
>> warning.
>>
>> ~Craig
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://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/20170418/2a3539c5/attachment.html>


More information about the cfe-dev mailing list