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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |7.5.0, 8.3.0, 9.2.0
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2021-05-19
      Known to fail|                            |10.1.0, 11.1.0, 12.0,
                   |                            |8.4.0, 9.3.0
             Status|UNCONFIRMED                 |NEW
                 CC|                            |jakub at gcc dot gnu.org
            Summary|warning: ignoring return    |[9/10/11/12 Regression]
                   |value of 'constexpr _Tp&&   |warning: ignoring return
                   |std::forward(typename       |value of 'constexpr _Tp&&
                   |std::remove_reference<_Tp>: |std::forward(typename
                   |:type&) [with _Tp =         |std::remove_reference<_Tp>:
                   |std::nullptr_t; typename    |:type&) [with _Tp =
                   |std::remove_reference<_Tp>: |std::nullptr_t; ...]',
                   |:type = std::nullptr_t]',   |declared with attribute
                   |declared with attribute     |'nodiscard'
                   |'nodiscard'                 |[-Wunused-result]
                   |[-Wunused-result]           |

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Mike Hommey from comment #0)
> (Note I'm not entirely sure this is a GCC bug, but it doesn't happen with
> GCC < 11 and with clang)

Yeah, this shouldn't warn.

Reduced:

[[nodiscard]] decltype(nullptr) null();

extern void foo(...);

void qux() {
    foo(null());
}


GCC 10 has the same warning, it's just that std::forward didn't have the
[[nodiscard]] attribute.

It only happens when a nodiscard function returns std::nullptr_t and it's
passed to an ellipsis. GCC 7 was OK, and 8.3 and 9.2

It started with r279680:

    re PR c++/92992 (Side-effects dropped when decltype(nullptr) typed
expression is passed to ellipsis)

            PR c++/92992
            * call.c (convert_arg_to_ellipsis): For decltype(nullptr) arguments
            that have side-effects use cp_build_compound_expr.

            * g++.dg/cpp0x/nullptr45.C: New test.

Reply via email to