Thread

  1. Re: 17f446784d54da827f74c2acc0fa772a41b92354 breaks orafce build

    Pavel Stehule <pavel.stehule@gmail.com> — 2025-12-26T18:12:46Z

    Hi
    
    pá 26. 12. 2025 v 13:40 odesílatel Japin Li <japinli@hotmail.com> napsal:
    
    > On Fri, 26 Dec 2025 at 12:16, Pavel Stehule <pavel.stehule@gmail.com>
    > wrote:
    > > pá 26. 12. 2025 v 11:50 odesílatel Japin Li <japinli@hotmail.com>
    > napsal:
    > >
    > >  On Fri, 26 Dec 2025 at 09:12, Pavel Stehule <pavel.stehule@gmail.com>
    > wrote:
    > >  > Hi
    > >  >
    > >  > I tried to build Orafce against the master without success. After
    > some searching I found so patch
    > >  >
    > >  > commit 17f446784d54da827f74c2acc0fa772a41b92354 -- fail
    > >  > Author: Peter Eisentraut <peter@eisentraut.org>
    > >  > Date:   Mon Dec 15 11:43:11 2025
    > >  >
    > >  >     Refactor static_assert() support.
    > >  >
    > >  > does it.
    > >  >
    > >  > It fails with strange errors
    > >  >
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:18: error:
    > expected parameter declarator
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       |                  ^
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:18: error:
    > expected ')'
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:1: note:
    > to match this '('
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       | ^
    > >  > /usr/local/pgsql/master/include/server/c.h:941:15: note: expanded
    > from macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |                      ^
    > >  > In file included from orafce.c:2:
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:1: error:
    > type specifier missing, defaults to 'int'; ISO
    > >  C99
    > >  > and later do not support implicit int [-Wimplicit-int]
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       | ^
    > >  >       | int
    > >  > /usr/local/pgsql/master/include/server/c.h:941:2: note: expanded from
    > macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |         ^
    > >  > In file included from orafce.c:4:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/guc.h:17:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/array.h:64:
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:18: error: expected
    > parameter declarator
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       |                  ^
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:18: error: expected
    > ')'
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:1: note: to match
    > this '('
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       | ^
    > >  > /usr/local/pgsql/master/include/server/c.h:941:15: note: expanded
    > from macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |                      ^
    > >  > In file included from orafce.c:4:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/guc.h:17:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/array.h:64:
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:1: error: type
    > specifier missing, defaults to 'int'; ISO C99 and
    > >  later
    > >  > do not support implicit int [-Wimplicit-int]
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       | ^
    > >  >       | int
    > >  > /usr/local/pgsql/master/include/server/c.h:941:2: note: expanded from
    > macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |         ^
    > >  > 6 errors generated.
    > >  > make: ***
    > [/usr/local/pgsql/master/lib/pgxs/src/makefiles/../../src/Makefile.global:1101:
    > orafce.bc] Chyba 1
    > >  > /usr/lib64/ccache/clang -Wno-ignored-attributes -fno-strict-aliasing
    > -fwrapv -fexcess-precision=standard -
    > >  > Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
    > -Wno-format-truncation -O2  -I. -I./ -
    > >  > I/usr/local/pgsql/master/include/server
    > -I/usr/local/pgsql/master/include/internal -D_GNU_SOURCE  -
    > >  I/usr/include/libxml2 -
    > >  > DWITH_GZFILEOP    -flto=thin -emit-llvm -c -o orafce.bc orafce.c
    > >  > In file included from orafce.c:2:
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:18: error:
    > expected parameter declarator
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       |                  ^
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:18: error:
    > expected ')'
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:1: note:
    > to match this '('
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       | ^
    > >  > /usr/local/pgsql/master/include/server/c.h:941:15: note: expanded
    > from macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |                      ^
    > >  > In file included from orafce.c:2:
    > >  > /usr/local/pgsql/master/include/server/storage/lwlock.h:64:1: error:
    > type specifier missing, defaults to 'int'; ISO
    > >  C99
    > >  > and later do not support implicit int [-Wimplicit-int]
    > >  >    64 | StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
    > >  >       | ^
    > >  >       | int
    > >  > /usr/local/pgsql/master/include/server/c.h:941:2: note: expanded from
    > macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |         ^
    > >  > In file included from orafce.c:4:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/guc.h:17:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/array.h:64:
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:18: error: expected
    > parameter declarator
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       |                  ^
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:18: error: expected
    > ')'
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:1: note: to match
    > this '('
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       | ^
    > >  > /usr/local/pgsql/master/include/server/c.h:941:15: note: expanded
    > from macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |                      ^
    > >  > In file included from orafce.c:4:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/guc.h:17:
    > >  > In file included from
    > /usr/local/pgsql/master/include/server/utils/array.h:64:
    > >  > /usr/local/pgsql/master/include/server/fmgr.h:508:1: error: type
    > specifier missing, defaults to 'int'; ISO C99 and
    > >  later
    > >  > do not support implicit int [-Wimplicit-int]
    > >  >   508 | StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <=
    > sizeof(((Pg_abi_values *) 0)->abi_extra),
    > >  >       | ^
    > >  >       | int
    > >  > /usr/local/pgsql/master/include/server/c.h:941:2: note: expanded from
    > macro 'StaticAssertDecl'
    > >  >   941 |         static_assert(condition, errmessage)
    > >  >       |         ^
    > >  > 6 errors generated.
    > >  > make: ***
    > [/usr/local/pgsql/master/lib/pgxs/src/makefiles/../../src/Makefile.global:1101:
    > orafce.bc] Chyba 1
    > >  >
    > >  > pavel@nemesis:~/src/postgresql/src$ gcc --version
    > >  > gcc (GCC) 15.2.1 20251211 (Red Hat 15.2.1-5)
    > >  > Copyright (C) 2025 Free Software Foundation, Inc.
    > >  > This is free software; see the source for copying conditions.  There
    > is NO
    > >  > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
    > PURPOSE.
    > >  >
    > >
    > >  Hi,
    > >
    > >  I can reproduce the issue on Ubuntu 24.04 with GCC 13.3.0.
    > >
    > >  What is interesting is that the compiler cannot find the static_assert
    > macro.
    > >
    > >  $ gcc -Wall -Wmissing-prototypes -Wpointer-arith
    > -Wdeclaration-after-statement -Werror=vla -Wendif-labels -
    > >  Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type
    > -Wshadow=compatible-local -Wformat-security -
    > >  fno-strict-aliasing -fwrapv -fexcess-precision=standard
    > -Wno-format-truncation -Wno-stringop-truncation -g -O0 -
    > >  Wmissing-prototypes -Wincompatible-pointer-types -fsanitize=bounds
    > -fPIC -fvisibility=hidden -I. -I./ -
    > >  I/home/japin/Codes/pg/main/build/pg/include/postgresql/server -
    > >  I/home/japin/Codes/pg/main/build/pg/include/postgresql/internal -O0
    > -D_GNU_SOURCE  -I/usr/include/libxml2 -dM -E
    > >  regexp.c  | grep -e __USE_ISOC -e STDC_VERSION -e static_assert
    > >  #define __USE_ISOC11 1
    > >  #define __USE_ISOC95 1
    > >  #define __USE_ISOC99 1
    > >  #define StaticAssertStmt(condition,errmessage) do {
    > static_assert(condition, errmessage); } while(0)
    > >  #define StaticAssertExpr(condition,errmessage) ((void) ({
    > static_assert(condition, errmessage); true; }))
    > >  #define __STDC_VERSION__ 201710L
    > >  #define StaticAssertDecl(condition,errmessage) static_assert(condition,
    > errmessage)
    > >
    > >  However, the following mini-code can find the static_assert macro.
    > >
    > >  $ cat <<EOF | gcc -Wall -Wmissing-prototypes -Wpointer-arith
    > -Wdeclaration-after-statement -Werror=vla -Wendif-labels
    > >  -Wmissing-format-attribute -Wimplicit-fallthrough=3
    > -Wcast-function-type -Wshadow=compatible-local -Wformat-security -
    > >  fno-strict-aliasing -fwrapv -fexcess-precision=standard
    > -Wno-format-truncation -Wno-stringop-truncation -g -O0 -
    > >  Wmissing-prototypes -Wincompatible-pointer-types -fsanitize=bounds
    > -fPIC -fvisibility=hidden -O0 -D_GNU_SOURCE -dM -E
    > >  - | grep -e __USE_ISOC -e STDC_VERSION -e static_assert
    > >  #include <stdio.h>
    > >  #include <assert.h>
    > >  int main(void) { return 0; }
    > >  EOF
    > >
    > > it is maybe some pgxs issue - meson build is ok
    >
    > If think I've found the problem:
    >
    > There's an assert.h file in the orafce directory, which causes <c.h> to
    > include this local version instead of the system's assert.h header.
    >
    > After renaming the assert.h file in the orafce directory to assert1.h, the
    > problem was resolved and everything worked correctly.
    >
    
    yes, it was there.
    
    fixed
    https://github.com/orafce/orafce/commit/512039ac0ba3ec3d0e7749bf7e9b76dd557edf07
    
    Thank you very much for this idea.  It really helps.
    
    Best regards
    
    Pavel
    
    
    > diff --git a/assert.c b/assert.c
    > index 30f53ad..2e3385c 100644
    > --- a/assert.c
    > +++ b/assert.c
    > @@ -1,6 +1,6 @@
    >  #include "postgres.h"
    >  #include "funcapi.h"
    > -#include "assert.h"
    > +#include "assert1.h"
    >  #include "miscadmin.h"
    >  #include "utils/acl.h"
    >  #include "utils/builtins.h"
    > diff --git a/assert.h b/assert.h
    > deleted file mode 100644
    > index 45c2fc7..0000000
    > --- a/assert.h
    > +++ /dev/null
    > @@ -1,9 +0,0 @@
    > -#ifndef __ASSERT__
    > -#define __ASSERT__
    > -
    > -#define ERRCODE_ORA_PACKAGES_INVALID_SCHEMA_NAME
    >  MAKE_SQLSTATE('4','4','0','0','1')
    > -#define ERRCODE_ORA_PACKAGES_INVALID_OBJECT_NAME
    >  MAKE_SQLSTATE('4','4','0','0','2')
    > -#define ERRCODE_ORA_PACKAGES_ISNOT_SIMPLE_SQL_NAME
    >  MAKE_SQLSTATE('4','4','0','0','3')
    > -#define ERRCODE_ORA_PACKAGES_ISNOT_QUALIFIED_SQL_NAME
    > MAKE_SQLSTATE('4','4','0','0','4')
    > -
    > -#endif
    >
    >
    > --
    > Regards,
    > Japin Li
    > ChengDu WenWu Information Technology Co., Ltd.
    >