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:
parent
8d65da1f01
commit
cf63c641ca
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user