Re: Assert for frontend programs? - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Assert for frontend programs?
Date
Msg-id 769.1355500475@sss.pgh.pa.us
Whole thread Raw
In response to Assert for frontend programs?  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: Assert for frontend programs?
List pgsql-hackers
Andrew Dunstan <andrew@dunslane.net> writes:
> As I'm working through the parallel dump patch, I notice this in one of 
> the header files:

> #ifdef USE_ASSERT_CHECKING
> #define Assert(condition) \
>      if (!(condition)) \
>      { \
>          write_msg(NULL, "Failed assertion in %s, line %d\n", \
>                    __FILE__, __LINE__); \
>          abort();\
>      }
> #else
> #define Assert(condition)
> #endif


> I'm wondering if we should have something like this centrally (e.g. in 
> postgres_fe.h)? I can certainly see people wanting to be able to use 
> Assert in frontend programs generally, and it makes sense to me not to 
> make everyone roll their own.

+1, especially if the hand-rolled versions are likely to be as bad as
that one (dangling else, maybe some other issues I'm not spotting
in advance of caffeine consumption).  I've wished for frontend Assert
a few times myself, but never bothered to make it happen.

Although I think we had this discussion earlier and it stalled at
figuring out exactly what the "print error" part of the macro ought
to be.  The above is obviously pg_dump-specific.  Perhaps
fprintf(stderr,...) would be sufficient, though -- it's not like
tremendous user friendliness ought to be necessary here.

Also, I think the message really has to include some string-ified
version of the assertion condition --- the line number alone is pretty
unhelpful when looking at field reports of uncertain provenance.

BTW, I think psql already has a "psql_assert".
        regards, tom lane



pgsql-hackers by date:

Previous
From: "Karl O. Pinc"
Date:
Subject: Re: Doc patch, index search_path where it's used to secure functions
Next
From: Merlin Moncure
Date:
Subject: Re: Use gcc built-in atomic inc/dec in lock.c