diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index ad49674..3878d84 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -334,6 +334,13 @@ create_plan(PlannerInfo *root, Path *best_path)
 	return plan;
 }
 
+static inline Node *
+castNodeImpl(void *c, enum NodeTag t)
+{
+	Assert(c == NULL || IsA(c, t));
+	return c;
+}
+
 /*
  * create_plan_recurse
  *	  Recursive guts of create_plan().
@@ -343,6 +350,8 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
 {
 	Plan	   *plan;
 
+#define castNode(_type_, nodeptr) ((_type_ *) castNodeImpl(nodeptr, _type_))
+
 	switch (best_path->pathtype)
 	{
 		case T_SeqScan:
@@ -433,7 +442,7 @@ create_plan_recurse(PlannerInfo *root, Path *best_path, int flags)
 			{
 				Assert(IsA(best_path, AggPath));
 				plan = (Plan *) create_agg_plan(root,
-												(AggPath *) best_path);
+												castNode(AggPath, best_path));
 			}
 			break;
 		case T_WindowAgg:
