--with-llvm on 32-bit platforms?
It seems that when I add --with-llvm flag to ./configure on any 32-bit
platform that I have (Debian 12, Debian 13, Arch Linux), many tests
invoked by `make check` fail, or, sometimes, hang forever. Is this a
known problem? It's not critical to me, just wanted to know if I should
abandon --with-llvm forever on such platforms. On 64-bit Linux
platforms, both x86 and ARM, --with-llvm works fine.
To reproduce, it's enough to:
make distclean
./configure --with-llvm
make -j23 -ks
make check
The last step is never successful to me, and, by the way, this can also
be reproduced with clang:
make distclean
./configure CC=clang CXX=clang++ --with-llvm CFLAGS=-msse2
make -j23 -ks
make check
Thanks in advance for your attention to this problem, or telling me this
is not a problem at all
Dmitry Mityugov писал(а) 2025-09-05 00:32:
It seems that when I add --with-llvm flag to ./configure on any 32-bit
platform that I have (Debian 12, Debian 13, Arch Linux), many tests
invoked by `make check` fail, or, sometimes, hang forever. Is this a
known problem? It's not critical to me, just wanted to know if I should
abandon --with-llvm forever on such platforms. On 64-bit Linux
platforms, both x86 and ARM, --with-llvm works fine.To reproduce, it's enough to:
make distclean
./configure --with-llvm
make -j23 -ks
make checkThe last step is never successful to me, and, by the way, this can also
be reproduced with clang:make distclean
./configure CC=clang CXX=clang++ --with-llvm CFLAGS=-msse2
make -j23 -ks
make checkThanks in advance for your attention to this problem, or telling me
this is not a problem at all
One of the reasons I ask this question is that according to
f5d07085822a1 parameter --with-llvm is now mandatory in some cases, but
it seems it can't be used.
Regards
Dmitry Mityugov писал(а) 2025-09-05 11:11:
Dmitry Mityugov писал(а) 2025-09-05 00:32:
It seems that when I add --with-llvm flag to ./configure on any 32-bit
platform that I have (Debian 12, Debian 13, Arch Linux), many tests
invoked by `make check` fail, or, sometimes, hang forever. Is this a
known problem? It's not critical to me, just wanted to know if I
should abandon --with-llvm forever on such platforms. On 64-bit Linux
platforms, both x86 and ARM, --with-llvm works fine.To reproduce, it's enough to:
make distclean
./configure --with-llvm
make -j23 -ks
make checkThe last step is never successful to me, and, by the way, this can
also be reproduced with clang:make distclean
./configure CC=clang CXX=clang++ --with-llvm CFLAGS=-msse2
make -j23 -ks
make checkThanks in advance for your attention to this problem, or telling me
this is not a problem at allOne of the reasons I ask this question is that according to
f5d07085822a1 parameter --with-llvm is now mandatory in some cases, but
it seems it can't be used.
By the way, when I rebuild REL_17_STABLE using the steps above (on
Debian 13 32-bit is this matters) tests in `make check` pass, so it
seems that something is broken in master.
On 05.09.25 13:32, Dmitry Mityugov wrote:
Dmitry Mityugov писал(а) 2025-09-05 11:11:
Dmitry Mityugov писал(а) 2025-09-05 00:32:
It seems that when I add --with-llvm flag to ./configure on any 32-
bit platform that I have (Debian 12, Debian 13, Arch Linux), many
tests invoked by `make check` fail, or, sometimes, hang forever. Is
this a known problem? It's not critical to me, just wanted to know if
I should abandon --with-llvm forever on such platforms. On 64-bit
Linux platforms, both x86 and ARM, --with-llvm works fine.To reproduce, it's enough to:
make distclean
./configure --with-llvm
make -j23 -ks
make checkThe last step is never successful to me, and, by the way, this can
also be reproduced with clang:make distclean
./configure CC=clang CXX=clang++ --with-llvm CFLAGS=-msse2
make -j23 -ks
make checkThanks in advance for your attention to this problem, or telling me
this is not a problem at allOne of the reasons I ask this question is that according to
f5d07085822a1 parameter --with-llvm is now mandatory in some cases,
but it seems it can't be used.By the way, when I rebuild REL_17_STABLE using the steps above (on
Debian 13 32-bit is this matters) tests in `make check` pass, so it
seems that something is broken in master.
It seems plausible that this is related to commit 2a600a93c7b "Make type
Datum be 8 bytes wide everywhere.". I don't have any more insights than
that.
Peter Eisentraut wrote 2025-09-15 09:36:
On 05.09.25 13:32, Dmitry Mityugov wrote:
Dmitry Mityugov писал(а) 2025-09-05 11:11:
Dmitry Mityugov писал(а) 2025-09-05 00:32:
It seems that when I add --with-llvm flag to ./configure on any 32-
bit platform that I have (Debian 12, Debian 13, Arch Linux), many
tests invoked by `make check` fail, or, sometimes, hang forever. Is
this a known problem? It's not critical to me, just wanted to know
if I should abandon --with-llvm forever on such platforms. On 64-bit
Linux platforms, both x86 and ARM, --with-llvm works fine.To reproduce, it's enough to:
make distclean
./configure --with-llvm
make -j23 -ks
make checkThe last step is never successful to me, and, by the way, this can
also be reproduced with clang:make distclean
./configure CC=clang CXX=clang++ --with-llvm CFLAGS=-msse2
make -j23 -ks
make checkThanks in advance for your attention to this problem, or telling me
this is not a problem at allOne of the reasons I ask this question is that according to
f5d07085822a1 parameter --with-llvm is now mandatory in some cases,
but it seems it can't be used.By the way, when I rebuild REL_17_STABLE using the steps above (on
Debian 13 32-bit is this matters) tests in `make check` pass, so it
seems that something is broken in master.It seems plausible that this is related to commit 2a600a93c7b "Make
type Datum be 8 bytes wide everywhere.". I don't have any more
insights than that.
Thanks for the hint. I did git bisect, and it seems that the first ‘bad’
commit is this:
commit 2a600a93c7be5b0bf8cacb1af78009db12bc4857
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed Aug 13 16:35:06 2025 -0400
Make type Datum be 8 bytes wide everywhere.
…
I'll try to look further to understand what particular change in this
commit is responsible for the problem.
Thank you again
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Peter Eisentraut wrote 2025-09-15 09:36:
It seems plausible that this is related to commit 2a600a93c7b "Make
type Datum be 8 bytes wide everywhere.". I don't have any more
insights than that.
Thanks for the hint. I did git bisect, and [ Peter's right ]
Interesting. You have at no point shown any details about what
these failures look like. However, I wonder if it could be
something about broken alignment expectations. The recent
commit 09036dc71 fixed one thing that we'd managed not to notice
in earlier testing, and I can't avoid the suspicion that there's
more.
regards, tom lane
Tom Lane писал(а) 2025-09-15 22:16:
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Peter Eisentraut wrote 2025-09-15 09:36:
It seems plausible that this is related to commit 2a600a93c7b "Make
type Datum be 8 bytes wide everywhere.". I don't have any more
insights than that.Thanks for the hint. I did git bisect, and [ Peter's right ]
Interesting. You have at no point shown any details about what
these failures look like. However, I wonder if it could be
something about broken alignment expectations. The recent
commit 09036dc71 fixed one thing that we'd managed not to notice
in earlier testing, and I can't avoid the suspicion that there's
more.
I did mention that `make check` fails if I enable --with-llvm flag on
32-bit Linux platforms, for both GCC and Clang, at the very first
message in this thread. Sorry if this got lost in quoting and
formatting.
Thank you for pointing me to the commit, I'll check it.
What's interesting is that when I add the following (quick and dirty)
assertion to DatumGetPointer on 32-bit Linux platforms,
DatumGetPointer(Datum X)
{
Assert((X & 0xFFFFFFFF00000000) == 0);
return (Pointer) (uintptr_t) X;
}
I get a failure in Postgres executable early on startup. If I am
correct, this means that there are places in the code that assume that
PointerGetDatum(DatumGetPointer(X)) == X, and this is not true if the
pointer size is smaller than the Datum size. Hopefully I am not correct
on this, but this might mean that the problem is broader than just
enabling --with-llvm.
Thank you for your valuable time,
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Tom Lane писал(а) 2025-09-15 22:16:
Interesting. You have at no point shown any details about what
these failures look like.
I did mention that `make check` fails if I enable --with-llvm flag on
32-bit Linux platforms, for both GCC and Clang, at the very first
message in this thread.
Indeed you said that, but that's about as content-free a problem
report as I've run into. What are the regression diffs? (If
they're massive, the first few would still be useful.) Does it
get hung up entirely? Are there crashes, and if so can you get
stack traces from them? You really shouldn't expect people to
spin up an environment like this just to see what happens.
What's interesting is that when I add the following (quick and dirty)
assertion to DatumGetPointer on 32-bit Linux platforms,
DatumGetPointer(Datum X)
{
Assert((X & 0xFFFFFFFF00000000) == 0);
return (Pointer) (uintptr_t) X;
}
I get a failure in Postgres executable early on startup.
Interesting, but again, how about a stack trace?
regards, tom lane
Tom Lane писал(а) 2025-09-15 23:21:
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Tom Lane писал(а) 2025-09-15 22:16:
Interesting. You have at no point shown any details about what
these failures look like.I did mention that `make check` fails if I enable --with-llvm flag on
32-bit Linux platforms, for both GCC and Clang, at the very first
message in this thread.Indeed you said that, but that's about as content-free a problem
report as I've run into. What are the regression diffs? (If
they're massive, the first few would still be useful.) Does it
get hung up entirely? Are there crashes, and if so can you get
stack traces from them? You really shouldn't expect people to
spin up an environment like this just to see what happens.What's interesting is that when I add the following (quick and dirty)
assertion to DatumGetPointer on 32-bit Linux platforms,DatumGetPointer(Datum X)
{
Assert((X & 0xFFFFFFFF00000000) == 0);
return (Pointer) (uintptr_t) X;
}I get a failure in Postgres executable early on startup.
Interesting, but again, how about a stack trace?
Sorry I didn't provide more information earlier. By the way, I pulled
the latest changes from the master branch and it didn't help. For the
problem with --with-llvm on 32-bit Debian 13.1 with GCC 14.2, I'm
attaching the partial console output from `make check`, 5000 first lines
from src/test/regress/regression.diffs (in particular, it contains a
bunch of these: "error: connection to server on socket
"/tmp/pg_regress-y0DQT8/.s.PGSQL.58928" failed"), and
src/test/regress/log/postmaster.log. Please let me know if I should send
more traces of the problem.
The number of tests that fail is random and is between 25-160, out of
229 total. Sometimes the tests hang entirely and I have to press Ctrl-C
to interrupt them.
When I enable the aforementioned assert and start `make check`, I
immediately get in tmp_install/log/initdb-template.log:
Running in no-clean mode. Mistakes will not be cleaned up.
The files belonging to this database system will be owned by user "dd".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default database encoding has accordingly been set to "SQL_ASCII".
The default text search configuration will be set to "english".
Data page checksums are enabled.
creating directory
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/initdb-template
... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default "max_connections" ... 100
selecting default "shared_buffers" ... 128MB
selecting default time zone ... Europe/Moscow
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... TRAP: failed Assert("(X &
0xFFFFFFFF00000000) == 0"), File: "../../../../src/include/postgres.h",
Line: 324, PID: 427452
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(ExceptionalCondition+0x6b)
[0x56c990cb]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(toast_tuple_init+0x2f1)
[0x567c19e1]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(heap_toast_insert_or_update+0xe0)
[0x56776b60]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x1a77bc)
[0x567617bc]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(heap_insert+0x69)
[0x56765509]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(simple_heap_insert+0x2d)
[0x5676660d]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(CatalogTupleInsertWithInfo+0x34)
[0x5681a734]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x2c7fed)
[0x56881fed]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x2caca9)
[0x56884ca9]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(analyze_rel+0x198)
[0x568864e8]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(vacuum+0x4cc)
[0x569066ec]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(ExecVacuum+0x1db)
[0x56906e8b]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(standard_ProcessUtility+0x7ed)
[0x56b2825d]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x56c02d)
[0x56b2602d]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x56c198)
[0x56b26198]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(PortalRun+0x18b)
[0x56b266fb]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(+0x5677a8)
[0x56b217a8]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(PostgresMain+0x1a17)
[0x56b23667]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(PostgresSingleUserMain+0x10b)
[0x56b24c2b]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(main+0x4c4)
[0x5670a504]
/lib/i386-linux-gnu/libc.so.6(+0x24cc3) [0xf75bbcc3]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0x88) [0xf75bbd88]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(_start+0x27)
[0x5670a5a7]
Aborted (core dumped)
child process exited with exit code 134
initdb: data directory
"/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/initdb-template"
not removed at user's request
It's probably possible to reproduce the problem on a 64-bit Linux (that
is, define Datum as uint128 to trigger the assert above) but I'm not
sure if this will be the only change required.
Regards,
On Tue, Sep 16, 2025 at 8:22 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
What's interesting is that when I add the following (quick and dirty)
assertion to DatumGetPointer on 32-bit Linux platforms,DatumGetPointer(Datum X)
{
Assert((X & 0xFFFFFFFF00000000) == 0);
return (Pointer) (uintptr_t) X;
}I get a failure in Postgres executable early on startup.
Interesting, but again, how about a stack trace?
Hmm. We use TypeSizeT in generated IR for Datum, which is obviously
incorrect in this configuration.
Thomas Munro <thomas.munro@gmail.com> writes:
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
I get a failure in Postgres executable early on startup.
Interesting, but again, how about a stack trace?
Hmm. We use TypeSizeT in generated IR for Datum, which is obviously
incorrect in this configuration.
Oh! Yeah, that is surely broken now. But it'd only explain problems
once you reach JIT-ed code, which I'd not expect to happen "early on
startup". So maybe there's another problem?
regards, tom lane
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Tom Lane писал(а) 2025-09-15 23:21:
Interesting, but again, how about a stack trace?
performing post-bootstrap initialization ... TRAP: failed Assert("(X &
0xFFFFFFFF00000000) == 0"), File: "../../../../src/include/postgres.h",
Line: 324, PID: 427452
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(ExceptionalCondition+0x6b)
[0x56c990cb]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(toast_tuple_init+0x2f1)
[0x567c19e1]
Ah-hah. What's going on there is that toast_tuple_init does
old_value =
(struct varlena *) DatumGetPointer(ttc->ttc_oldvalues[i]);
new_value =
(struct varlena *) DatumGetPointer(ttc->ttc_values[i]);
before checking if the values are NULL. Now, this is at least
theoretically okay because it doesn't try to dereference either
pointer until it's checked the isnull flags. But the Datum it's
reading might well be garbage, thus triggering your assertion.
I don't see a really nice way to avoid this. We could perhaps
do something like
old_value =
(struct varlena *)
(ttc->ttc_oldisnull[i] ? NULL : DatumGetPointer(ttc->ttc_oldvalues[i]));
but adding extra cycles here isn't very appetizing.
If you want to pursue it further you could temporarily patch
toast_tuple_init and then see if you get any further, but I'm
not sure you'll learn anything interesting. I think Munro
has put his finger on the problem.
regards, tom lane
On Tue, Sep 16, 2025 at 12:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Thomas Munro <thomas.munro@gmail.com> writes:
Hmm. We use TypeSizeT in generated IR for Datum, which is obviously
incorrect in this configuration.Oh! Yeah, that is surely broken now. But it'd only explain problems
once you reach JIT-ed code, which I'd not expect to happen "early on
startup". So maybe there's another problem?
Should be easy enough to fix, I just have to remember how to set up a
32 bit environment... on it...
Tom Lane писал(а) 2025-09-16 03:31:
Dmitry Mityugov <d.mityugov@postgrespro.ru> writes:
Tom Lane писал(а) 2025-09-15 23:21:
Interesting, but again, how about a stack trace?
performing post-bootstrap initialization ... TRAP: failed Assert("(X &
0xFFFFFFFF00000000) == 0"), File:
"../../../../src/include/postgres.h",
Line: 324, PID: 427452/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(ExceptionalCondition+0x6b)
[0x56c990cb]
/home/dd/projects/postgres/vanilla/planb/postgres/master/tmp_install/usr/local/pgsql/bin/postgres(toast_tuple_init+0x2f1)
[0x567c19e1]Ah-hah. What's going on there is that toast_tuple_init does
old_value =
(struct varlena *)
DatumGetPointer(ttc->ttc_oldvalues[i]);
new_value =
(struct varlena *) DatumGetPointer(ttc->ttc_values[i]);before checking if the values are NULL. Now, this is at least
theoretically okay because it doesn't try to dereference either
pointer until it's checked the isnull flags. But the Datum it's
reading might well be garbage, thus triggering your assertion.I don't see a really nice way to avoid this. We could perhaps
do something likeold_value =
(struct varlena *)
(ttc->ttc_oldisnull[i] ? NULL :
DatumGetPointer(ttc->ttc_oldvalues[i]));but adding extra cycles here isn't very appetizing.
Thank you for the explanation.
If you want to pursue it further you could temporarily patch
toast_tuple_init and then see if you get any further, but I'm
not sure you'll learn anything interesting. I think Munro
has put his finger on the problem.
This, unrelated to --with-llvm, task, can be pursued on a 64-bit Linux,
provided the system has the multilibs installed and -m32 was added to
the list of compiler options, like in
make distclean -s && ./configure CFLAGS="-Og -m32" --enable-cassert &&
make -sj23 && make check
I created a secondary DatumGetPointer() function, with a bit different
name and without the assert, reproduced the failure using the command
line above, replaced all calls to DatumGetPointer() function in
toast_tuple_init() with the version without assert... And have found no
more problems so far. At least `make check` passes clearly.
Thank you again
On Tue, Sep 16, 2025 at 12:51 PM Thomas Munro <thomas.munro@gmail.com> wrote:
On Tue, Sep 16, 2025 at 12:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Thomas Munro <thomas.munro@gmail.com> writes:
Hmm. We use TypeSizeT in generated IR for Datum, which is obviously
incorrect in this configuration.Oh! Yeah, that is surely broken now.
This patch seems to work OK here. The deform code is a little tricky
as you have to think carefully about which places need TypeDatum and
which need TypeSizeT in llvmjit_deform.c, since the v_offp variable
really is size_t. Tested on Debian 13 with i386 packages installed.
More changes would be needed if Datum is changed into a struct.
Attachments:
v1-0001-jit-Fix-type-used-for-Datum-values-in-LLVM-IR.patchapplication/x-patch; name=v1-0001-jit-Fix-type-used-for-Datum-values-in-LLVM-IR.patchDownload+94-82
Thomas Munro <thomas.munro@gmail.com> writes:
On Tue, Sep 16, 2025 at 12:51 PM Thomas Munro <thomas.munro@gmail.com> wrote:
On Tue, Sep 16, 2025 at 12:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Oh! Yeah, that is surely broken now.
This patch seems to work OK here. The deform code is a little tricky
as you have to think carefully about which places need TypeDatum and
which need TypeSizeT in llvmjit_deform.c, since the v_offp variable
really is size_t. Tested on Debian 13 with i386 packages installed.
Thanks for doing that. It looks generally plausible to my eye,
but I'm hardly qualified to do a detailed review.
More changes would be needed if Datum is changed into a struct.
I can only imagine us doing that as a compile option to help
catch errors. Our ambition need not reach to making the compile
option play with --with-llvm, perhaps.
regards, tom lane
Tom Lane wrote 2025-09-16 16:45:
Thomas Munro <thomas.munro@gmail.com> writes:
On Tue, Sep 16, 2025 at 12:51 PM Thomas Munro <thomas.munro@gmail.com>
wrote:On Tue, Sep 16, 2025 at 12:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Oh! Yeah, that is surely broken now.
This patch seems to work OK here. The deform code is a little tricky
as you have to think carefully about which places need TypeDatum and
which need TypeSizeT in llvmjit_deform.c, since the v_offp variable
really is size_t. Tested on Debian 13 with i386 packages installed.Thanks for doing that. It looks generally plausible to my eye,
but I'm hardly qualified to do a detailed review.More changes would be needed if Datum is changed into a struct.
I can only imagine us doing that as a compile option to help
catch errors. Our ambition need not reach to making the compile
option play with --with-llvm, perhaps.
I tried the patch and it works well, thanks a lot to everyone involved
in fixing this.
On Wed, Sep 17, 2025 at 3:47 AM Dmitry Mityugov
<d.mityugov@postgrespro.ru> wrote:
I tried the patch and it works well, thanks a lot to everyone involved
in fixing this.
Thanks for the report and confirmation! I also pinged Andres just in
case he had any objections to the approach, given that he wrote this
stuff. Nope, so pushed.
As a side note, apt.llvm.org is apparently no longer publishing 32 bit
packages, and Debian's own i386 packages for LLVM bits and pieces seem
to have some inconvenient conflicts with their amd64 twins, and
indirectly lots of other stuff including my window manager (!). Or
perhaps it was always like that, and I'm recalling apt.llvm.org's old
32 bit packages. All perfectly manageable in a dedicated
VM/container/chroot, but I wonder how long multiarch support will
continue.
Thomas Munro <thomas.munro@gmail.com> writes:
On Wed, Sep 17, 2025 at 3:47 AM Dmitry Mityugov
<d.mityugov@postgrespro.ru> wrote:I tried the patch and it works well, thanks a lot to everyone involved
in fixing this.
Thanks for the report and confirmation! I also pinged Andres just in
case he had any objections to the approach, given that he wrote this
stuff. Nope, so pushed.
Thanks for taking care of that!
As a side note, apt.llvm.org is apparently no longer publishing 32 bit
packages, and Debian's own i386 packages for LLVM bits and pieces seem
to have some inconvenient conflicts with their amd64 twins, and
indirectly lots of other stuff including my window manager (!). Or
perhaps it was always like that, and I'm recalling apt.llvm.org's old
32 bit packages. All perfectly manageable in a dedicated
VM/container/chroot, but I wonder how long multiarch support will
continue.
I think that for mainstream Linux distros, the handwriting on the
wall is getting clearer and clearer. Fedora stopped supporting
any 32-bit architectures some time ago, and Debian has dropped
the first shoe (i386) too. (They might still build some 32-bit
libraries, but I don't see the point of worrying about that case.
If you're on a fundamentally 64-bit system, surely Postgres is not
one of the applications you want to cram into 32-bit.)
The various BSDen and maybe some niche Linux distros are probably
the only platforms we should be worrying about for 32-bit.
Despite having been the one who started this particular round of
changes, I do foresee that PG will drop 32-bit support altogether
in not so many years. I'm willing to keep kicking that can
down the road for a little while more, though.
regards, tom lane
Thomas Munro wrote 2025-09-17 06:30:
On Wed, Sep 17, 2025 at 3:47 AM Dmitry Mityugov
<d.mityugov@postgrespro.ru> wrote:I tried the patch and it works well, thanks a lot to everyone involved
in fixing this.Thanks for the report and confirmation! I also pinged Andres just in
case he had any objections to the approach, given that he wrote this
stuff. Nope, so pushed.
Just wanted to add that this patch also fixes the problem when
--with-llvm is enabled on 32-bit ARMs; tests from `make check` pass
clearly when Postgres is build with this option enabled with both GCC
and Clang on 32-bit Debian 13.1 for armhf architecture.
Regards,