Sun Studio compiler warnings

Started by Peter Eisentrautabout 17 years ago5 messages
#1Peter Eisentraut
peter_e@gmx.net

Sun Studio is producing these compiler warnings (among others):

"tsquery_op.c", line 193: warning: syntax error: empty declaration
"tsquery_op.c", line 194: warning: syntax error: empty declaration
"tsquery_op.c", line 195: warning: syntax error: empty declaration
"tsquery_op.c", line 196: warning: syntax error: empty declaration
"tsquery_op.c", line 197: warning: syntax error: empty declaration
"tsquery_op.c", line 198: warning: syntax error: empty declaration

"tsvector_op.c", line 177: warning: syntax error: empty declaration
"tsvector_op.c", line 178: warning: syntax error: empty declaration
"tsvector_op.c", line 179: warning: syntax error: empty declaration
"tsvector_op.c", line 180: warning: syntax error: empty declaration
"tsvector_op.c", line 181: warning: syntax error: empty declaration
"tsvector_op.c", line 182: warning: syntax error: empty declaration
"tsvector_op.c", line 183: warning: syntax error: empty declaration

This relates to the following sort of code:

#define CMPFUNC( NAME, CONDITION ) \
Datum \
NAME(PG_FUNCTION_ARGS) { \
TSQuery a = PG_GETARG_TSQUERY_COPY(0); \
TSQuery b = PG_GETARG_TSQUERY_COPY(1); \
int res = CompareTSQ(a,b); \
\
PG_FREE_IF_COPY(a,0); \
PG_FREE_IF_COPY(b,1); \
\
PG_RETURN_BOOL( CONDITION ); \
}

CMPFUNC(tsquery_lt, res < 0);
CMPFUNC(tsquery_le, res <= 0);
CMPFUNC(tsquery_eq, res == 0);
CMPFUNC(tsquery_ge, res >= 0);
CMPFUNC(tsquery_gt, res > 0);
CMPFUNC(tsquery_ne, res != 0);

The closing semicolon is strictly speaking not allowed here. We could
remove it, but that would probably upset pgindent?

I recall that we used to have a bunch of similar problems with the AIX
compilers a long time ago. Does anyone recall the solution, and do we
still care? (Note that it's only a warning in this case.)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#1)
Re: Sun Studio compiler warnings

Peter Eisentraut <peter_e@gmx.net> writes:

CMPFUNC(tsquery_lt, res < 0);
CMPFUNC(tsquery_le, res <= 0);
CMPFUNC(tsquery_eq, res == 0);
CMPFUNC(tsquery_ge, res >= 0);
CMPFUNC(tsquery_gt, res > 0);
CMPFUNC(tsquery_ne, res != 0);

The closing semicolon is strictly speaking not allowed here. We could
remove it, but that would probably upset pgindent?

If the warnings annoy you, do what PG_FUNCTION_INFO_V1 does.

#define PG_FUNCTION_INFO_V1(funcname) \
extern PGDLLIMPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \
const Pg_finfo_record * \
CppConcat(pg_finfo_,funcname) (void) \
{ \
static const Pg_finfo_record my_finfo = { 1 }; \
return &my_finfo; \
} \
extern int no_such_variable

regards, tom lane

#3Robert Haas
robertmhaas@gmail.com
In reply to: Peter Eisentraut (#1)
Re: Sun Studio compiler warnings

The closing semicolon is strictly speaking not allowed here. We could
remove it, but that would probably upset pgindent?

I recall that we used to have a bunch of similar problems with the AIX
compilers a long time ago. Does anyone recall the solution, and do we still
care? (Note that it's only a warning in this case.)

How about the good old

do {
...
} while (0)

trick?

...Robert

#4Alvaro Herrera
alvherre@commandprompt.com
In reply to: Robert Haas (#3)
Re: Sun Studio compiler warnings

Robert Haas escribi�:

The closing semicolon is strictly speaking not allowed here. We could
remove it, but that would probably upset pgindent?

I recall that we used to have a bunch of similar problems with the AIX
compilers a long time ago. Does anyone recall the solution, and do we still
care? (Note that it's only a warning in this case.)

How about the good old

do {
...
} while (0)

trick?

That can't be used because the macro is defining a completely new
function.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#5Robert Haas
robertmhaas@gmail.com
In reply to: Alvaro Herrera (#4)
Re: Sun Studio compiler warnings

Ooooh.... yeah. Time for some caffeine.

...Robert

On Thu, Oct 30, 2008 at 9:34 PM, Alvaro Herrera
<alvherre@commandprompt.com> wrote:

Show quoted text

Robert Haas escribió:

The closing semicolon is strictly speaking not allowed here. We could
remove it, but that would probably upset pgindent?

I recall that we used to have a bunch of similar problems with the AIX
compilers a long time ago. Does anyone recall the solution, and do we still
care? (Note that it's only a warning in this case.)

How about the good old

do {
...
} while (0)

trick?

That can't be used because the macro is defining a completely new
function.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support