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)
|
core_yyscan_t yyscanner)
|
||||||
{
|
{
|
||||||
FunctionParameter *lastd = (FunctionParameter *) llast(directargs);
|
FunctionParameter *lastd = (FunctionParameter *) llast(directargs);
|
||||||
|
int ndirectargs;
|
||||||
|
|
||||||
/* No restriction unless last direct arg is VARIADIC */
|
/* No restriction unless last direct arg is VARIADIC */
|
||||||
if (lastd->mode == FUNC_PARAM_VARIADIC)
|
if (lastd->mode == FUNC_PARAM_VARIADIC)
|
||||||
@ -13407,8 +13408,11 @@ makeOrderedSetArgs(List *directargs, List *orderedargs,
|
|||||||
orderedargs = NIL;
|
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),
|
return list_make2(list_concat(directargs, orderedargs),
|
||||||
makeInteger(list_length(directargs)));
|
makeInteger(ndirectargs));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* insertSelectOptions()
|
/* insertSelectOptions()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user