------- Additional Comments From reichelt at gcc dot gnu dot org 2005-07-25 16:02 ------- I don't think that Andrew's example is valid, since a pure function modifies global data. Btw, shouldn't the compiler complain about that?
Here's an example that is valid IMHO: ================================================== extern "C" void abort(); struct A { int i; A() : i(1) {} A(const A& a) : i(1) {} }; A __attribute__((pure)) foo() { return A(); } int main() { if (foo().i != 1) abort(); return 0; } ================================================== The abort is triggered on the 3.4 branch and the 4.0 branch. GCC 3.3.6 and mainline work fine. The same happens, if one uses __attribute__((const)). -- What |Removed |Added ---------------------------------------------------------------------------- CC| |reichelt at gcc dot gnu dot | |org Keywords| |monitored Known to fail|4.0.1 |3.4.0 4.0.1 Known to work|3.4.0 4.1.0 |3.3.6 4.1.0 Summary|[4.0 Regression] pure |[3.4/4.0 Regression] pure |attribute produces incorrect|attribute produces incorrect |results |results http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22597