Re: Generate pg_stat_get_* functions with Macros - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Generate pg_stat_get_* functions with Macros
Date
Msg-id 1188769.1670640236@sss.pgh.pa.us
Whole thread Raw
In response to Re: Generate pg_stat_get_* functions with Macros  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Generate pg_stat_get_* functions with Macros  (Michael Paquier <michael@paquier.xyz>)
Re: Generate pg_stat_get_* functions with Macros  (Nathan Bossart <nathandbossart@gmail.com>)
List pgsql-hackers
This series of patches has caused buildfarm member wrasse to
start complaining about "empty declarations":

 wrasse        | 2022-12-09 21:08:33 |
"/export/home/nm/farm/studio64v12_6/HEAD/pgsql.build/../pgsql/src/backend/utils/adt/pgstatfuncs.c",line 56: warning:
syntaxerror:  empty declaration 
 wrasse        | 2022-12-09 21:08:33 |
"/export/home/nm/farm/studio64v12_6/HEAD/pgsql.build/../pgsql/src/backend/utils/adt/pgstatfuncs.c",line 59: warning:
syntaxerror:  empty declaration 
 wrasse        | 2022-12-09 21:08:33 |
"/export/home/nm/farm/studio64v12_6/HEAD/pgsql.build/../pgsql/src/backend/utils/adt/pgstatfuncs.c",line 62: warning:
syntaxerror:  empty declaration 

[ etc etc ]

Presumably it could be silenced by removing the semicolons after
the new macro calls:

/* pg_stat_get_analyze_count */
PG_STAT_GET_RELENTRY_INT64(analyze_count);

/* pg_stat_get_autoanalyze_count */
PG_STAT_GET_RELENTRY_INT64(autoanalyze_count);

/* pg_stat_get_autovacuum_count */
PG_STAT_GET_RELENTRY_INT64(autovacuum_count);

I wondered if that would confuse pgindent, but a quick check
says no.  (The blank lines in between may be helping.)

While I'm nitpicking, I think that the way you've set up the
macro definitions is a bit dangerous:

#define PG_STAT_GET_RELENTRY_INT64(stat)                        \
Datum                                                           \
CppConcat(pg_stat_get_,stat)(PG_FUNCTION_ARGS)                  \
{                                                               \
...                                                             \
    PG_RETURN_INT64(result);                                    \
}                                                               \

The backslash after the last right brace means that the line
following that is part of the macro body.  This does no harm as
long as said line is blank ... but I think it's a foot-gun
waiting to bite somebody, because visually you'd think the macro
ends with the brace.  So I'd leave off that last backslash.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Error-safe user functions
Next
From: Tom Lane
Date:
Subject: -Wunreachable-code-generic-assoc warnings on elver