https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112765
Bug ID: 112765 Summary: [14 regression] -Wparentheses warning even when extra parens are present Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: s...@li-snyder.org Target Milestone: --- hi - With a recent checkout of gcc14 (20231129), on a x86_64-pc-linux-gnu host, the following source gives a bogus -Wparentheses warning with -Wall: -------------------------------------------------------------- struct ptr { ptr& operator= (ptr&& __u); explicit operator bool() const; }; ptr getShare (); template<class T> class AnaToolHandle final { public: int getMode (ptr& sharedTool) const; }; template<class T> int AnaToolHandle<T>::getMode (ptr& sharedTool) const { if ((sharedTool = getShare ())) return 0; return 1; } void initialize(AnaToolHandle<int>& jetCleaningTool) { ptr sharedTool; jetCleaningTool.getMode (sharedTool); } -------------------------------------------------------------- $ g++ -c -Wall x.cc x.cc: In instantiation of ‘int AnaToolHandle<T>::getMode(ptr&) const [with T = int]’: x.cc:28:27: required from here 28 | jetCleaningTool.getMode (sharedTool); | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ x.cc:19:31: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 19 | if ((sharedTool = getShare ())) | ^ It is true that there is an assignment used as a truth value, and in the original code this was intentional, which the author signalled by adding an extra pair of parentheses. However, gcc emits the warning even though the extra parentheses are there. (Adding yet another pair of parentheses around the condition does not silence the warning.) This warning does not occcur with gcc 13.2.1 20230728.