Fix C23 compiler warning
authorPeter Eisentraut <[email protected]>
Tue, 22 Oct 2024 06:12:43 +0000 (08:12 +0200)
committerPeter Eisentraut <[email protected]>
Tue, 22 Oct 2024 06:17:42 +0000 (08:17 +0200)
The approach of declaring a function pointer with an empty argument
list and hoping that the compiler will not complain about casting it
to another type no longer works with C23, because foo() is now
equivalent to foo(void).

We don't need to do this here.  With a few struct forward declarations
we can supply a correct argument list without having to pull in
another header file.

(This is the only new warning with C23.  Together with the previous
fix a67a49648d9, this makes the whole code compile cleanly under C23.)

Reviewed-by: Tom Lane <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/95c6a9bf-d306-43d8-b880-664ef08f2944%40eisentraut.org

src/include/nodes/pathnodes.h

index 07e2415398e89ce8b0896f424ee4bf17622de8dc..add0f9e45fcb3ec398826fc44ed5b7a5a7fb3301 100644 (file)
@@ -1107,6 +1107,9 @@ typedef struct IndexOptInfo IndexOptInfo;
 #define HAVE_INDEXOPTINFO_TYPEDEF 1
 #endif
 
+struct IndexPath;              /* avoid including pathnodes.h here */
+struct PlannerInfo;                /* avoid including pathnodes.h here */
+
 struct IndexOptInfo
 {
    pg_node_attr(no_copy_equal, no_read, no_query_jumble)
@@ -1206,7 +1209,7 @@ struct IndexOptInfo
    bool        amcanmarkpos;
    /* AM's cost estimator */
    /* Rather than include amapi.h here, we declare amcostestimate like this */
-   void        (*amcostestimate) () pg_node_attr(read_write_ignore);
+   void        (*amcostestimate) (struct PlannerInfo *, struct IndexPath *, double, Cost *, Cost *, Selectivity *, double *, double *) pg_node_attr(read_write_ignore);
 };
 
 /*