perl 5.36, C99, -Wdeclaration-after-statement -Wshadow=compatible-local - Mailing list pgsql-hackers

From Andres Freund
Subject perl 5.36, C99, -Wdeclaration-after-statement -Wshadow=compatible-local
Date
Msg-id 20221101180158.l4zg6ljah5ow2vvo@awork3.anarazel.de
Whole thread Raw
Responses Re: perl 5.36, C99, -Wdeclaration-after-statement -Wshadow=compatible-local
Re: perl 5.36, C99, -Wdeclaration-after-statement -Wshadow=compatible-local
List pgsql-hackers
Hi,

Tom pinged me privately because mylodon, an animal enforcing C89/C99
compatibility, was failed. This is due to perl on the machine being upgraded
to perl 5.36.

Mylodon was failing because of:

configure:18839: ccache clang-13 -c -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement
-Werror=vla-Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type
-Wformat-security-fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -g
-O1-ggdb -g3 -fno-omit-frame-pointer -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare
-Wno-missing-field-initializers-Wno-array-bounds -std=c99 -Wc11-extensions -Werror=c11-extensions  -D_GNU_SOURCE
-I/usr/include/libxml2 -I/usr/lib/x86_64-linux-gnu/perl/5.36/CORE conftest.c >&5
 
In file included from conftest.c:170:
In file included from /usr/lib/x86_64-linux-gnu/perl/5.36/CORE/perl.h:5777:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/thread.h:386:8: error: '_Thread_local' is a C11 extension
[-Werror,-Wc11-extensions]
extern PERL_THREAD_LOCAL void *PL_current_context;
       ^
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/config.h:5154:27: note: expanded from macro 'PERL_THREAD_LOCAL'
#define PERL_THREAD_LOCAL _Thread_local /**/
                          ^
1 error generated.


I.e. perl's headers use C11 features, which unsurprisingly doesn't work when
using -Wc11-extensions -Werror=c11-extensions.

For now I worked around this by disabling perl for mylodon, but that's
obviously not a great fix.


perl 5.36 also causes a bunch of warnings locally, where I obviously don't
use -Wc11-extensions -Werror=c11-extensions:

-Wdeclaration-after-statement produces a few copies of:
[1767/2259 42  78%] Compiling C object src/pl/plperl/plperl.so.p/meson-generated_.._SPI.c.o
In file included from /usr/lib/x86_64-linux-gnu/perl/5.36/CORE/perl.h:7242,
                 from ../../../../home/andres/src/postgresql/src/pl/plperl/plperl.h:82,
                 from ../../../../home/andres/src/postgresql/src/pl/plperl/SPI.xs:15:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/inline.h: In function ‘Perl_cop_file_avn’:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/inline.h:3489:5: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
 3489 |     const char *file = CopFILE(cop);
      |     ^~~~~

And -Wshadow=compatible-local triggers the following, very verbose, warning:

[1767/2259 42  78%] Compiling C object src/pl/plperl/plperl.so.p/meson-generated_.._SPI.c.o
...
In file included from /usr/lib/x86_64-linux-gnu/perl/5.36/CORE/perl.h:4155:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv_inline.h: In function ‘Perl_newSV_type’:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:97:35: warning: declaration of ‘p_’ shadows a previous local
[-Wshadow=compatible-local]
   97 | #  define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
      |                                   ^~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv.h:1394:54: note: in definition of macro ‘SvSTASH_set’
 1394 |                 (((XPVMG*)  SvANY(sv))->xmg_stash = (val)); } STMT_END
      |                                                      ^~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:105:32: note: in expansion of macro ‘MUTABLE_PTR’
  105 | #define MUTABLE_HV(p)   ((HV *)MUTABLE_PTR(p))
      |                                ^~~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv_inline.h:487:29: note: in expansion of macro ‘MUTABLE_HV’
  487 |             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
      |                             ^~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:107:32: note: in expansion of macro ‘MUTABLE_PTR’
  107 | #define MUTABLE_SV(p)   ((SV *)MUTABLE_PTR(p))
      |                                ^~~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv.h:346:59: note: in expansion of macro ‘MUTABLE_SV’
  346 | #define SvREFCNT_inc(sv)                Perl_SvREFCNT_inc(MUTABLE_SV(sv))
      |                                                           ^~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv_inline.h:487:40: note: in expansion of macro ‘SvREFCNT_inc’
  487 |             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
      |                                        ^~~~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:97:35: note: shadowed declaration is here
   97 | #  define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
      |                                   ^~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv.h:1394:54: note: in definition of macro ‘SvSTASH_set’
 1394 |                 (((XPVMG*)  SvANY(sv))->xmg_stash = (val)); } STMT_END
      |                                                      ^~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:105:32: note: in expansion of macro ‘MUTABLE_PTR’
  105 | #define MUTABLE_HV(p)   ((HV *)MUTABLE_PTR(p))
      |                                ^~~~~~~~~~~
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/sv_inline.h:487:29: note: in expansion of macro ‘MUTABLE_HV’
  487 |             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
      |                             ^~~~~~~~~~


I don't know how much longer we can rely on headers being
-Wdeclaration-after-statement clean, my impression is that people don't have a
lot of patience for C89isms anymore.

I suspect the shadowing issue might get fixed if we report it, there've been a
bunch of fixes around that not too long ago.


I wonder if we should try to use -isystem for a bunch of external
dependencies. That way we can keep the more aggressive warnings with a lower
likelihood of conflicting with stuff outside of our control.

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Corey Huinker
Date:
Subject: Re: pg_dump: Refactor code that constructs ALTER ... OWNER TO commands
Next
From: Tom Lane
Date:
Subject: Re: pg15 inherited stats expressions: cache lookup failed for statistics object