Re: BUG #19062: PostgreSQL 12.22 does not compile because of conflicting types for CollationCreate
От | Peter Dyballa |
---|---|
Тема | Re: BUG #19062: PostgreSQL 12.22 does not compile because of conflicting types for CollationCreate |
Дата | |
Msg-id | D84FCBB7-4F4C-41F3-82DD-FCE904A8B0A4@Web.DE обсуждение исходный текст |
Ответ на | Re: BUG #19062: PostgreSQL 12.22 does not compile because of conflicting types for CollationCreate (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-bugs |
From examining the pre-processed code I saw # 32 "/usr/lib/gcc/powerpc-apple-darwin9/4.2.1/include/stdbool.h" 3 4 #define _STDBOOL_H or # 29 "/opt/local/lib/gcc14/gcc/powerpc-apple-darwin9/14.2.0/include/stdbool.h" 3 4 #define _STDBOOL_H and thought "It's already there", but I let PostgreSQL 12.22 build with that explicit define: /usr/bin/gcc-4.2 -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute-Wformat-security -fno-strict-aliasing -fwrapv -pipe -I/opt/local/libexec/openssl3/include -Os-arch ppc -I../../../src/include -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -D__STDBOOL_H -I/opt/local/include/libxml2 -I/opt/local/include -c -o pg_collation.o pg_collation.c pg_collation.c:55: error: conflicting types for ‘CollationCreate’ ../../../src/include/catalog/pg_collation.h:70: error: previous declaration of ‘CollationCreate’ was here pg_collation.c: In function ‘CollationCreate’: pg_collation.c:196: warning: passing argument 3 of ‘heap_form_tuple’ from incompatible pointer type vs. /opt/local/bin/gcc-mp-14 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels-Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation-Wno-stringop-truncation -pipe -I/opt/local/libexec/openssl3/include -Os -arch ppc -I../../../src/include -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -D__STDBOOL_H -I/opt/local/include/libxml2 -I/opt/local/include -c -o pg_collation.o pg_collation.c pg_collation.c:46:1: error: conflicting types for 'CollationCreate'; have 'Oid(const char *, Oid, Oid, char, _Bool, int32, const char *, const char *, const char *, _Bool, _Bool)' {aka 'unsigned int(const char *, unsigned int, unsigned int, char, _Bool, int, const char *, const char *, const char *, _Bool, _Bool)'} 46 | CollationCreate(const char *collname, Oid collnamespace, | ^~~~~~~~~~~~~~~ In file included from pg_collation.c:25: ../../../src/include/catalog/pg_collation.h:62:17: note: previous declaration of 'CollationCreate' with type 'Oid(constchar *, Oid, Oid, char, bool, int32, const char *, const char *, const char *, bool, bool)' {aka 'unsignedint(const char *, unsigned int, unsigned int, char, unsigned char, int, const char *, const char *, const char*, unsigned char, unsigned char)'} 62 | extern Oid CollationCreate(const char *collname, Oid collnamespace, | ^~~~~~~~~~~~~~~ pg_collation.c: In function 'CollationCreate': pg_collation.c:196:48: error: passing argument 3 of 'heap_form_tuple' from incompatible pointer type [-Wincompatible-pointer-types] 196 | tup = heap_form_tuple(tupDesc, values, nulls); | ^~~~~ | | | _Bool * In file included from pg_collation.c:18: ../../../src/include/access/htup_details.h:794:87: note: expected 'bool *' {aka 'unsigned char *'} but argument is oftype '_Bool *' 794 | Datum *values, bool *isnull); | ~~~~~~^~~~~~ So this additional flag brings indeed no change. -------------------- When trying to remove XML support I found that XSLT support has to be cancelled explicitly (configure tests need libxml/tree.h).I think this could be automated – XSLT support is not possible without libxml2, is it? Anyway, the builds fail with similar messages: /usr/bin/gcc-4.2 -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute-Wformat-security -fno-strict-aliasing -fwrapv -pipe -I/opt/local/libexec/openssl3/include -Os-arch ppc -I../../../src/include -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -I/opt/local/include -c -o pg_collation.o pg_collation.c pg_collation.c:55: error: conflicting types for ‘CollationCreate’ ../../../src/include/catalog/pg_collation.h:70: error: previous declaration of ‘CollationCreate’ was here pg_collation.c: In function ‘CollationCreate’: pg_collation.c:196: warning: passing argument 3 of ‘heap_form_tuple’ from incompatible pointer type gnumake[3]: *** [pg_collation.o] Error 1 gnumake[3]: Leaving directory `/opt/local/var/macports/build/postgresql12-5f1ceb12/work/postgresql-12.22/src/backend/catalog' vs. /opt/local/bin/gcc-mp-14 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels-Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation-Wno-stringop-truncation -pipe -I/opt/local/libexec/openssl3/include -Os -arch ppc -I../../../src/include -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -I/opt/local/include -c -o pg_collation.opg_collation.c pg_collation.c:46:1: error: conflicting types for 'CollationCreate'; have 'Oid(const char *, Oid, Oid, char, _Bool, int32, const char *, const char *, const char *, _Bool, _Bool)' {aka 'unsigned int(const char *, unsigned int, unsigned int, char, _Bool, int, const char *, const char *, const char *, _Bool, _Bool)'} 46 | CollationCreate(const char *collname, Oid collnamespace, | ^~~~~~~~~~~~~~~ In file included from pg_collation.c:25: ../../../src/include/catalog/pg_collation.h:62:17: note: previous declaration of 'CollationCreate' with type 'Oid(constchar *, Oid, Oid, char, bool, int32, const char *, const char *, const char *, bool, bool)' {aka 'unsignedint(const char *, unsigned int, unsigned int, char, unsigned char, int, const char *, const char *, const char*, unsigned char, unsigned char)'} 62 | extern Oid CollationCreate(const char *collname, Oid collnamespace, | ^~~~~~~~~~~~~~~ pg_collation.c: In function 'CollationCreate': pg_collation.c:196:48: error: passing argument 3 of 'heap_form_tuple' from incompatible pointer type [-Wincompatible-pointer-types] 196 | tup = heap_form_tuple(tupDesc, values, nulls); | ^~~~~ | | | _Bool * In file included from pg_collation.c:18: ../../../src/include/access/htup_details.h:794:87: note: expected 'bool *' {aka 'unsigned char *'} but argument is oftype '_Bool *' 794 | Datum *values, bool *isnull); | ~~~~~~^~~~~~ gnumake[3]: *** [pg_collation.o] Error 1 gnumake[3]: Leaving directory `/opt/local/var/macports/build/postgresql12-5f1ceb12/work/postgresql-12.22/src/backend/catalog' Adding -D__STDBOOL_H brings no real change, so the culprit could be ICU. Configuring without ICU brings success. With bothcompilers and with all tests. Solution #1. -------------------- I am building in a MacPorts environment, for convenience. So its own XML and ICU installations get used. With Mac OS X 10.5.8,Leopard, /usr/lib/libxml2.2.dylib is installed – and ICU only partially: /usr/lib/libicucore.dylib. OTOH MacPortshas a patch file for building PostgreSQL versions 13…17 with ICU: --- src/include/utils/pg_locale.h.orig 2022-08-09 04:44:29.000000000 +0800 +++ src/include/utils/pg_locale.h 2022-10-25 01:49:09.000000000 +0800 @@ -17,6 +17,9 @@ #endif #ifdef USE_ICU #include <unicode/ucol.h> +#ifdef bool +#undef bool +#endif #endif #include "utils/guc.h" --- src/backend/utils/adt/formatting.c.orig 2022-10-25 02:07:10.000000000 +0800 +++ src/backend/utils/adt/formatting.c 2022-10-25 02:07:21.000000000 +0800 @@ -81,6 +81,9 @@ #ifdef USE_ICU #include <unicode/ustring.h> +#ifdef bool +#undef bool +#endif #endif #include "catalog/pg_collation.h" Quite simple… It removes the type _Bool from the pre-processed output. Applying it also for version 12.22 brings successwhen configuring with XML, XSLT, and ICU support. The C header files <unicode/ucol.h> and <unicode/ustring.h> areboth from MacPorts' ICU installation. Solution #2. It's time to upgrade anyway. Thanks for your support, encouraging me to dig a bit on the surface. -- Greetings Pete 0 %-/\_// (*)(*)
В списке pgsql-bugs по дате отправления: