> As far as I can see its the latest change, which turned the macro > into fuctions. I think its overall quite mysterious under which > circumstances gcc (or clang) optimize that check away. In particular > because compilers change and something that works now might break > tomorrow.
I don't know for sure if the old code relied on undefined behavior or if Clang simply miscompiled it. The macro -> function transformation did not really alter the semantics other than introducing volatile attributes so if the new form breaks gcc I suppose we were just lucky with the old one. > That said, I think it makes sense to use something which does _not_ > involve any undefined behavior. Agreed. If people mind the 7.9 instability with gcc I can revert the bignum patch since Clang isn't default even on OS X 10.8, but maybe we can give it a few days first.