pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

Started by Jeff Davisabout 2 months ago6 messages
#1Jeff Davis
jdavis@postgresql.org

Inline pg_ascii_tolower() and pg_ascii_toupper().

Discussion: /messages/by-id/450ceb6260cad30d7afdf155d991a9caafee7c0d.camel@j-davis.com
Reviewed-by: Chao Li <li.evan.chao@gmail.com>

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ec4997a9d733e91b614d0c2f3e6445cc2905fd16

Modified Files
--------------
src/include/port.h | 25 +++++++++++++++++++++++--
src/port/pgstrcasecmp.c | 26 --------------------------
2 files changed, 23 insertions(+), 28 deletions(-)

#2Álvaro Herrera
alvherre@kurilemu.de
In reply to: Jeff Davis (#1)
Re: pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

On 2025-Nov-26, Jeff Davis wrote:

Inline pg_ascii_tolower() and pg_ascii_toupper().

I think this broke the CI on (some flavors of?) Windows. In
https://cirrus-ci.com/task/6080935063453696
I got

[19:09:39.518] [1597/2357] Linking target src/backend/postgres.exe
[19:09:39.518] FAILED: [code=1] src/backend/postgres.exe
[19:09:39.518] "cc" @src/backend/postgres.exe.rsp
[19:09:39.518] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src/backend/postgres_lib.a.p/commands_event_trigger.c.obj: in function `filter_list_to_array':
[19:09:39.518] c:\cirrus\build/../src/backend/commands/event_trigger.c:377:(.text+0x2a5): undefined reference to `pg_ascii_toupper'
[19:09:39.518] collect2.exe: error: ld returned 1 exit status
[19:09:39.520] [1598/2357] Compiling C object src/backend/snowball/dict_snowball.dll.p/libstemmer_stem_ISO_8859_1_indonesian.c.obj
[19:09:39.521] [1599/2357] Compiling C object src/backend/snowball/dict_snowball.dll.p/libstemmer_stem_ISO_8859_1_irish.c.obj
[19:09:39.616] [1600/2357] Compiling C object src/backend/snowball/dict_snowball.dll.p/libstemmer_stem_ISO_8859_1_english.c.obj
[19:09:39.648] [1601/2357] Compiling C object src/backend/replication/pgoutput/pgoutput.dll.p/pgoutput.c.obj
[19:09:39.760] [1602/2357] Compiling C object src/backend/snowball/dict_snowball.dll.p/libstemmer_stem_ISO_8859_1_german.c.obj
[19:09:39.762] ninja: build stopped: subcommand failed.

I'm surprised it didn't do anything to the buildfarm. Are we lacking coverage?

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Álvaro Herrera (#2)
Re: pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

=?utf-8?Q?=C3=81lvaro?= Herrera <alvherre@kurilemu.de> writes:

On 2025-Nov-26, Jeff Davis wrote:

Inline pg_ascii_tolower() and pg_ascii_toupper().

I think this broke the CI on (some flavors of?) Windows. In
https://cirrus-ci.com/task/6080935063453696
I got

[19:09:39.518] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src/backend/postgres_lib.a.p/commands_event_trigger.c.obj: in function `filter_list_to_array':
[19:09:39.518] c:\cirrus\build/../src/backend/commands/event_trigger.c:377:(.text+0x2a5): undefined reference to `pg_ascii_toupper'

That's bizarre. I checked recent cfbot rebuilds of some of my patches
and there's no problem, also just looking at port.h it's impossible
to see how this could happen. Some weird compiled-code caching
misbehavior in CI, perhaps?

regards, tom lane

#4Chao Li
li.evan.chao@gmail.com
In reply to: Tom Lane (#3)
Re: pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

On Nov 29, 2025, at 04:40, Tom Lane <tgl@sss.pgh.pa.us> wrote:

=?utf-8?Q?=C3=81lvaro?= Herrera <alvherre@kurilemu.de> writes:

On 2025-Nov-26, Jeff Davis wrote:

Inline pg_ascii_tolower() and pg_ascii_toupper().

I think this broke the CI on (some flavors of?) Windows. In
https://cirrus-ci.com/task/6080935063453696
I got

[19:09:39.518] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src/backend/postgres_lib.a.p/commands_event_trigger.c.obj: in function `filter_list_to_array':
[19:09:39.518] c:\cirrus\build/../src/backend/commands/event_trigger.c:377:(.text+0x2a5): undefined reference to `pg_ascii_toupper'

That's bizarre. I checked recent cfbot rebuilds of some of my patches
and there's no problem, also just looking at port.h it's impossible
to see how this could happen. Some weird compiled-code caching
misbehavior in CI, perhaps?

regards, tom lane

ec4997a moved the two functions from pgstrcasecmp.c to port.h and made them inline, so maybe some old .o were not rebuilt and still need to link to the old functions.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

#5Andres Freund
andres@anarazel.de
In reply to: Tom Lane (#3)
Re: pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

Hi,

On 2025-11-28 15:40:19 -0500, Tom Lane wrote:

=?utf-8?Q?=C3=81lvaro?= Herrera <alvherre@kurilemu.de> writes:

On 2025-Nov-26, Jeff Davis wrote:

Inline pg_ascii_tolower() and pg_ascii_toupper().

I think this broke the CI on (some flavors of?) Windows. In
https://cirrus-ci.com/task/6080935063453696
I got

[19:09:39.518] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src/backend/postgres_lib.a.p/commands_event_trigger.c.obj: in function `filter_list_to_array':
[19:09:39.518] c:\cirrus\build/../src/backend/commands/event_trigger.c:377:(.text+0x2a5): undefined reference to `pg_ascii_toupper'

That's bizarre. I checked recent cfbot rebuilds of some of my patches
and there's no problem, also just looking at port.h it's impossible
to see how this could happen. Some weird compiled-code caching
misbehavior in CI, perhaps?

Yea, I suspect something with ccache is going wrong. We have before noticed
problems with ccache on mingw, where it somehow used .o files from the wrong
major versions, despite obviously the input files obviously not supposed to be
matching. I don't know what could cause that...

For now I've cleared the task's cache, but that's clearly not a full fix...

Greetings,

Andres Freund

#6Thomas Munro
thomas.munro@gmail.com
In reply to: Andres Freund (#5)
Re: pgsql: Inline pg_ascii_tolower() and pg_ascii_toupper().

On Sun, Nov 30, 2025 at 3:53 AM Andres Freund <andres@anarazel.de> wrote:

On 2025-11-28 15:40:19 -0500, Tom Lane wrote:

=?utf-8?Q?=C3=81lvaro?= Herrera <alvherre@kurilemu.de> writes:

On 2025-Nov-26, Jeff Davis wrote:

Inline pg_ascii_tolower() and pg_ascii_toupper().

I think this broke the CI on (some flavors of?) Windows. In
https://cirrus-ci.com/task/6080935063453696
I got

[19:09:39.518] C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: src/backend/postgres_lib.a.p/commands_event_trigger.c.obj: in function `filter_list_to_array':
[19:09:39.518] c:\cirrus\build/../src/backend/commands/event_trigger.c:377:(.text+0x2a5): undefined reference to `pg_ascii_toupper'

That's bizarre. I checked recent cfbot rebuilds of some of my patches
and there's no problem, also just looking at port.h it's impossible
to see how this could happen. Some weird compiled-code caching
misbehavior in CI, perhaps?

Yea, I suspect something with ccache is going wrong. We have before noticed
problems with ccache on mingw, where it somehow used .o files from the wrong
major versions, despite obviously the input files obviously not supposed to be
matching. I don't know what could cause that...

To have compiled event_trigger.c without a warning about an undeclared
function and then generated an unresolvable symbol reference, I
suppose it must either have (1) failed to track the dependency on the
precompiled header (so ccache spat out a cached .o from before commit
ec4997a9 that it shouldn't have), or (2) failed to re-precompile the
header (so ccache spat out a cached .pch from before commit ec4997a9
that it shouldn't have and then this or some earlier build compiled a
broken .o)? Hmm...