I wrote: > I'm tempted to propose the attached small code rearrangement, which > might dissuade the compiler from thinking it can get away with this. > While I concur with your point that an old xlc version might not be > that exciting, there could be other compilers doing the same thing > in the future.
After thinking about it a bit more, I'm not even convinced that what xlc seems to be doing is illegal per C spec. There are no sequence points within return list_make2(list_concat(directargs, orderedargs), makeInteger(ndirectargs)); and therefore there's an argument to be made that the compiler doesn't have to care whether any side-effects of list_concat() occur before or after the evaluation of makeInteger(ndirectargs). If the potential side-effects of list_concat() can be disregarded until the end of this statement, then the code change is perfectly legal. Maybe some very careful language-lawyering could prove differently, but it's not as open-and-shut as one could wish. So now I'm thinking that we need this patch anyway, xlc or not. regards, tom lane