http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59739
Bug ID: 59739 Summary: missed optimization: attribute ((pure)) could be honored more often Product: gcc Version: 4.8.2 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: joerg.rich...@pdv-fs.de Created attachment 31786 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31786&action=edit Script for demonstration Attached is a script (t.sh) that creates two .cc files, compiles and executes them. It tests whether attribute ((pure)) is used on different functions with this signatures: struct Struct { int val; }; int globalInt(); Struct globalStruct(); struct Class { int classInt(); Struct classStruct(); virtual int classVirtualInt(); virtual Struct classVirtualStruct(); }; The output with GCC is 4.8.2 is this: globalInt: 1 globalStruct: 0 classInt: 1 classStruct: 0 classVirtualInt: 0 classVirtualStruct: 0 Meaning only globalInt and classInt are optimised. All other functions are also candidates for attribute-pure optimisation.