From c3c70f57e03d0874201074332f1b92da753e37f8 Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Wed, 24 Mar 2021 11:19:32 +0100
Subject: [PATCH 3/4] fix sqlsmith crash

---
 src/backend/utils/adt/selfuncs.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 29fc218149..1701b01df1 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -3309,8 +3309,6 @@ add_unique_group_expr(PlannerInfo *root, List *exprinfos, Node *expr,
 {
 	GroupExprInfo *exprinfo;
 	ListCell   *lc;
-	Bitmapset  *varnos;
-	Index		varno;
 
 	/* can't get both vars and vardata for the expression */
 	Assert(!(vars && vardata));
@@ -3326,19 +3324,27 @@ add_unique_group_expr(PlannerInfo *root, List *exprinfos, Node *expr,
 
 	exprinfo = (GroupExprInfo *) palloc(sizeof(GroupExprInfo));
 
-	varnos = pull_varnos(root, expr);
+	exprinfo->expr = expr;
+	exprinfo->varinfos = NIL;
 
-	/*
-	 * Expressions with vars from multiple relations should never get here, as
-	 * we split them to vars.
-	 */
-	Assert(bms_num_members(varnos) == 1);
+	if (!vardata)
+	{
+		Bitmapset  *varnos;
+		Index		varno;
 
-	varno = bms_singleton_member(varnos);
+		varnos = pull_varnos(root, (Node *) vars);
 
-	exprinfo->expr = expr;
-	exprinfo->varinfos = NIL;
-	exprinfo->rel = root->simple_rel_array[varno];
+		/*
+		 * Expressions with vars from multiple relations should never get here, as
+		 * we split them to vars.
+		 */
+		Assert(bms_num_members(varnos) == 1);
+
+		varno = bms_singleton_member(varnos);
+		exprinfo->rel = root->simple_rel_array[varno];
+	}
+	else
+		exprinfo->rel = vardata->rel;
 
 	Assert(exprinfo->rel);
 
-- 
2.30.2