https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84994
Bug ID: 84994 Summary: Missing accessor hint for private field at -O1 and above Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dmalcolm at gcc dot gnu.org Target Milestone: --- Given this: class foo { public: double get_ratio() const { return m_ratio; } private: double m_ratio; }; void test(foo *ptr) { if (ptr->m_ratio >= 0.5) ;// etc } we emit an accessor hint at -O0: <source>: In function 'void test(foo*)': <source>:12:12: error: 'double foo::m_ratio' is private within this context if (ptr->m_ratio >= 0.5) ^~~~~~~ <source>:7:10: note: declared private here double m_ratio; ^~~~~~~ <source>:12:12: note: field 'double foo::m_ratio' can be accessed via 'double foo::get_ratio() const' if (ptr->m_ratio >= 0.5) ^~~~~~~ get_ratio() but not at -O1 and above: <source>: In function 'void test(foo*)': <source>:12:12: error: 'double foo::m_ratio' is private within this context if (ptr->m_ratio >= 0.5) ^~~~~~~ <source>:7:10: note: declared private here double m_ratio; ^~~~~~~ [reported by user "flacs" as a comment on my blogpost here: https://developers.redhat.com/blog/2018/03/15/gcc-8-usability-improvements/ ]