Thread: Paint some PG_USED_FOR_ASSERTS_ONLY in inline functions of ilist.h and bufpage.h

Paint some PG_USED_FOR_ASSERTS_ONLY in inline functions of ilist.h and bufpage.h

From
Michael Paquier
Date:
Hi all,

The following functions in ilist.h and bufpage.h use some arguments
only in assertions:
- dlist_next_node
- dlist_prev_node
- slist_has_next
- slist_next_node
- PageValidateSpecialPointer

Without PG_USED_FOR_ASSERTS_ONLY, this can lead to compilation
warnings when not using assertions, and one example of that is
plpgsql_check.  We don't have examples on HEAD where
PG_USED_FOR_ASSERTS_ONLY is used on arguments, but that looks to work
properly with gcc.

Thoughts?
--
Michael

Attachment
On Tue, Jan 19, 2021 at 9:53 AM Michael Paquier <michael@paquier.xyz> wrote:
>
> Hi all,
>
> The following functions in ilist.h and bufpage.h use some arguments
> only in assertions:
> - dlist_next_node
> - dlist_prev_node
> - slist_has_next
> - slist_next_node
> - PageValidateSpecialPointer
>
> Without PG_USED_FOR_ASSERTS_ONLY, this can lead to compilation
> warnings when not using assertions, and one example of that is
> plpgsql_check.

For the record, that's due to that extra flags in the Makefile:

override CFLAGS += -I$(top_builddir)/src/pl/plpgsql/src -Wall

I think that we're still far from being able to get a clean output
using -Wall on postgres itself, so I don't know how much we can
promise to external code, but fixing those may be a good step.

>  We don't have examples on HEAD where
> PG_USED_FOR_ASSERTS_ONLY is used on arguments, but that looks to work
> properly with gcc.

Yeah I don't see any explicit mention on that on gcc manual.  For the
record it also work as expected using clang, and the attached patch
remove all warnings when compiling plpgsql_check.



Re: Paint some PG_USED_FOR_ASSERTS_ONLY in inline functions of ilist.h and bufpage.h

From
Michael Paquier
Date:
On Tue, Jan 19, 2021 at 04:27:43PM +0800, Julien Rouhaud wrote:
> Yeah I don't see any explicit mention on that on gcc manual.  For the
> record it also work as expected using clang, and the attached patch
> remove all warnings when compiling plpgsql_check.

FWIW, the part of the GCC docs that I looked at is here:
https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes

And what I have done does not seem completely legal either for
function arguments, even if I am not getting any complaints when
compiling that.
--
Michael

Attachment