On Thu, 19 Feb 2026, martin_n_fuller wrote:
GCC 16 doesn't optimize away the unused return value from mpz_class post-increment in code like "mpz_class a = 1; a++;".
That's just normal C++ rules, nothing specific to GMP or gcc-16. There are very few cases where optimizations are allowed to change the output of a program (like the one you included in your email), and this is not one of them. And a++ both increments and returns the old value, so it has to create a separate object.
We could try to mark __gmp_allocate_func with __attribute__((malloc(__gmp_reallocate_func))), but gcc does not seem to use it to allow optimizations like it does for free(malloc(n)), so even with LTO it wouldn't help. The only option I can think of for this optimization would be to write a gcc plugin with specific knowledge of GMP functions, not worth the effort when almost noone would use it.
-- Marc Glisse _______________________________________________ gmp-bugs mailing list [email protected] https://gmplib.org/mailman/listinfo/gmp-bugs
