Re: 17f446784d54da827f74c2acc0fa772a41b92354 breaks orafce build - Mailing list pgsql-hackers
| From | Pavel Stehule |
|---|---|
| Subject | Re: 17f446784d54da827f74c2acc0fa772a41b92354 breaks orafce build |
| Date | |
| Msg-id | CAFj8pRBVQBRkKCLzWnORzdnvWPWo=pADctuzb7WOsJ4i0XH2-A@mail.gmail.com Whole thread Raw |
| In response to | Re: 17f446784d54da827f74c2acc0fa772a41b92354 breaks orafce build (Japin Li <japinli@hotmail.com>) |
| List | pgsql-hackers |
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.
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.
pgsql-hackers by date: