https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134

Jeremy R. <llvm at rifkin dot dev> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |llvm at rifkin dot dev

--- Comment #7 from Jeremy R. <llvm at rifkin dot dev> ---
I have encountered this issue as well and I'm having to work around it.

```
struct S {};

__attribute__((warn_unused_result)) S bar();

void foo() {
    S s = bar();
}
```

```
<source>:6:14: warning: ignoring return value of 'S bar()' declared with
attribute 'warn_unused_result' [-Wunused-result]
    6 |     S s = bar();
      |           ~~~^~
```

Clang handles this right, gcc does not https://cpp.godbolt.org/z/zoq3756zK

I see there is some discussion here about whether warn_unused_result should be
applied to a function returning an empty struct. Maybe not, but this comes up
with templated code.

Interestingly this doesn't happen for [[nodiscard]], it looks like it might
only be checked in cvt.cc and c-typecheck.cc instead of tree-cfg.cc where it
manifests for warn_unused_result.

I have a patch locally to fix this and will submit it.

Reply via email to