https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105130
Bug ID: 105130 Summary: gcc does not warn about unused return value of last expression of statement expr Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dani at danielbertalan dot dev Target Milestone: --- Created attachment 52739 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52739&action=edit Proposed patch The following code does not cause a warning about the return value of the foo() function being ignored: $ cat unused.cc [[nodiscard]] int foo(); int main() { ({ foo(); }); } $ g++ -Wunused-value -std=c++20 unused.cc [no warnings] The issue seems to be that CLEANUP_POINT_EXPR and STATEMENT_LIST -- which are what statement expressions are turned into -- are not handled in convert_to_void() (cp/cvt.cc). The attached patch resolves the issue, but as a newbie to hacking on gcc, I can't evaluate if it has any unintended consequences.