https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63818
--- Comment #5 from Blaine Bell <blaine at blainebell dot org> --- > There is no sequence point between the pre-increments of i as common inside a > function call is not a sequence point. So the order of which arguments are > evaluated > is not defined in the standard which is why you get different behavior > between two > different compilers. Ah, ok. I see. The problem is that the spec is trying to provide "flexibility" for asynchronous execution, when in-fact, it adds to the ambiguity and confusion of the language. This makes sense on why this is a problem, but this is a serious flaw in how the language was defined. Asynchronously and performance should be addressed separately, not at the same time as trying to express logic of a program.