Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit eb48619

Browse filesBrowse files
committed
Fix optimization hazard in gram.y's makeOrderedSetArgs(), redux.
It appears that commit cf63c64, which intended to prevent misoptimization of the result-building step in makeOrderedSetArgs, didn't go far enough: buildfarm member hornet's version of xlc is now optimizing back to the old, broken behavior in which list_length(directargs) is fetched only after list_concat() has changed that value. I'm not entirely convinced whether that's an undeniable compiler bug or whether it can be justified by a sufficiently aggressive interpretation of C sequence points. So let's just change the code to make it harder to misinterpret. Back-patch to all supported versions, just in case. Discussion: https://postgr.es/m/1830491.1601944935@sss.pgh.pa.us
1 parent 710c0a6 commit eb48619
Copy full SHA for eb48619

File tree

Expand file treeCollapse file tree

1 file changed

+3
-3
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+3
-3
lines changed
Open diff view settings
Collapse file

‎src/backend/parser/gram.y‎

Copy file name to clipboardExpand all lines: src/backend/parser/gram.y
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14533,7 +14533,7 @@ makeOrderedSetArgs(List *directargs, List *orderedargs,
1453314533
core_yyscan_t yyscanner)
1453414534
{
1453514535
FunctionParameter *lastd = (FunctionParameter *) llast(directargs);
14536-
int ndirectargs;
14536+
Value *ndirectargs;
1453714537

1453814538
/* No restriction unless last direct arg is VARIADIC */
1453914539
if (lastd->mode == FUNC_PARAM_VARIADIC)
@@ -14557,10 +14557,10 @@ makeOrderedSetArgs(List *directargs, List *orderedargs,
1455714557
}
1455814558

1455914559
/* don't merge into the next line, as list_concat changes directargs */
14560-
ndirectargs = list_length(directargs);
14560+
ndirectargs = makeInteger(list_length(directargs));
1456114561

1456214562
return list_make2(list_concat(directargs, orderedargs),
14563-
makeInteger(ndirectargs));
14563+
ndirectargs);
1456414564
}
1456514565

1456614566
/* insertSelectOptions()

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.