Fix portability issue in ordered-set patch.

Overly compact coding in makeOrderedSetArgs() led to a platform dependency:
if the compiler chose to execute the subexpressions in the wrong order,
list_length() might get applied to an already-modified List, giving a
value we didn't want.  Per buildfarm.
This commit is contained in:
Tom Lane 2013-12-23 20:24:07 -05:00
parent 8d65da1f01
commit cf63c641ca
1 changed files with 5 additions and 1 deletions

View File

@ -13385,6 +13385,7 @@ makeOrderedSetArgs(List *directargs, List *orderedargs,
core_yyscan_t yyscanner)
{
FunctionParameter *lastd = (FunctionParameter *) llast(directargs);
int ndirectargs;
/* No restriction unless last direct arg is VARIADIC */
if (lastd->mode == FUNC_PARAM_VARIADIC)
@ -13407,8 +13408,11 @@ makeOrderedSetArgs(List *directargs, List *orderedargs,
orderedargs = NIL;
}
/* don't merge into the next line, as list_concat changes directargs */
ndirectargs = list_length(directargs);
return list_make2(list_concat(directargs, orderedargs),
makeInteger(list_length(directargs)));
makeInteger(ndirectargs));
}
/* insertSelectOptions()