site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Here's some sample code that demonstrates the behavior: { long stack[4] = {1,2,3,4}; long *sp = test + 4; /* top of stack is at (sp - 1) */ /* add the top of stack to the next element and pop */ *(sp - 2) += *(--sp); } One might expect this to result in a stack like: {1, 2, 7, 4} {1, 6, 3, 4} But in fact it results in: {1, 7, 3, 4} This just seems bizarre to me. The most bizarre part in my mind is that one might think the program above should be identical to: { long stack[4] = {1,2,3,4} int sp = 4; stack[sp-2] += stack[--sp]; } but this snippet actually results in {1,2,7,4}. Does anyone have insight into this? Thanks, -Aaron _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... Hello list, I just ran into what seems to be fairly peculiar behavior of Apple's GCC (v4.0.1 PPC) that seemed worth pointing out. It is hard to say if it is really a bug since the C spec is fairly non-deterministic, but it is peculiar. This is the behavior of GNU GCC (v 4.2.3 on Ubuntu x86-32) and Apple GCC (v4.0.1) on Intel. Another reasonable guess might be that the prefix-decrement would be evaluated before the lhs is resolved to a value which should result in: Again, I'm not sure that this is really a bug since the C spec is annoyingly vague about exactly when prefix increment/decrement is supposed to happen. But it seems like it should at least be consistent between the two cases. This email sent to site_archiver@lists.apple.com