(This is similar to PR 27371) When a function or method has attribute warn_unused_result, and the return type has a destructor, gcc does not emit a warning. gcc 4.0.3 emitted a warning; gcc 4.1.2 does not; gcc 4.3-20070427 does not.
[EMAIL PROTECTED]:~/exp-warn-unused-result$ cat warn.cc int Alpha() __attribute__ ((warn_unused_result)); class C1 { public: C1(); ~C1(); public: int value_; int Beta() __attribute__ ((warn_unused_result)) { return value_; } C1 Gamma() __attribute__ ((warn_unused_result)) { return *this; } }; extern C1 Delta() __attribute__ ((warn_unused_result)); int Foo() { C1 c1; Alpha(); c1.Beta(); c1.Gamma(); Delta(); return 0; } [EMAIL PROTECTED]:~/exp-warn-unused-result$ /home/mec/gcc-4.3-20070427/install/bin/g++ -Wall -S warn.cc warn.cc: In function 'int Foo()': warn.cc:22: warning: ignoring return value of 'int Alpha()', declared with attribute warn_unused_result warn.cc:23: warning: ignoring return value of 'int C1::Beta()', declared with attribute warn_unused_result [EMAIL PROTECTED]:~/exp-warn-unused-result$ /home/mec/gcc-4.1.2/install/bin/g++ -Wall -S warn.cc warn.cc: In function 'int Foo()': warn.cc:22: warning: ignoring return value of 'int Alpha()', declared with attribute warn_unused_result warn.cc:23: warning: ignoring return value of 'int C1::Beta()', declared with attribute warn_unused_result [EMAIL PROTECTED]:~/exp-warn-unused-result$ /home/mec/gcc-4.0.3/install/bin/g++ -Wall -S warn.cc warn.cc: In function 'int Foo()': warn.cc:22: warning: ignoring return value of 'int Alpha()', declared with attribute warn_unused_result warn.cc:23: warning: ignoring return value of 'int C1::Beta()', declared with attribute warn_unused_result warn.cc:24: warning: ignoring return value of 'C1 C1::Gamma()', declared with attribute warn_unused_result warn.cc:25: warning: ignoring return value of 'C1 Delta()', declared with attribute warn_unused_result -- Summary: warn_unused_result prints no warning for return value with destructor Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mec at google dot com GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31742