Re: Fix race with LLVM and bison.

From: "Maksim(dot)Melnikov" <m(dot)melnikov(at)postgrespro(dot)ru>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Fix race with LLVM and bison.
Date: 2026-03-30 07:56:02
Message-ID: a0d57cf7-1f41-456a-8b9e-eeb28d927a70@postgrespro.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi

On 3/27/26 21:56, Andres Freund wrote:
> Hi,
>
> On 2026-03-27 14:31:52 +0300, Maksim.Melnikov wrote:
>> I've found build error in configuration --with-llvm
>>
>> CPPFLAGS="-O2" ./configure --enable-debug --enable-cassert
>> --enable-tap-tests --with-openssl --with-icu  --with-llvm
>>
>> ....
>>
>> make world-bin -j3
>>
>> ....
>>
>> cubescan.c:9:10: fatal error: 'cubeparse.h' file not found
>>     9 | #include "cubeparse.h"  /* must be after cubedata.h for YYSTYPE and
>> NDBOX */
>>
>> ....
>> segscan.c:9:10: fatal error: 'segparse.h' file not found
>>     9 | #include "segparse.h"   /* must be after segdata.h for SEG */
>>
>>
>> The reason is race, that exist between LLVM compilation and bison source
>> code generation and compilation can occur first.
>>
>> Ideally LLVM compilation target should depend on header files targets.
>>
>> The error is difficult to reproduce and I've done simple patch to have
>> stable reproducing. Fix patch is also attached.
> You don't need a sleep to show there's a problem, you can just do
> make -C contrib/cube cubescan.bc
>
> We don't have the same issue in the backend, as for backend code each .bc file
> depends on the .o file:
>
> src/backend/common.mk:
>
> ifeq ($(with_llvm), yes)
> objfiles.txt: $(patsubst %.o,%.bc, $(OBJS))
> $(patsubst %.o,%.bc, $(OBJS)): $(OBJS)
> endif
>
> But for some reason I didn't add the same logic to pgxs.mk.
>
> I think we need something like the attached to make the dependencies work.
>
>
> I'm a bit worried about breaking some extensions if were to backpatch this. So
> I'm somewhat inclined to just fix this in master.
>
> Greetings,
>
> Andres Freund

Thanks for attentions, I see your patch is better. Few additional thoughts

1. Now I see that we have two different places to configure backend and
extensions, maybe we should

apply your patch to some common place, for example
src/Makefile.global.in, because it seems common

build logic. How do you think?

2. If you have some doubts about backpatch, I suggest to apply
fix-llvm-contrib-pgxs-deps.diff on master

and patch
v2-0001-Fix-race-with-LLVM-compilation-and-bison-code-gen.patch as
backpatch, because this one

correct it only for problematic contribs. How do you think?

Greetings,

Maksim Melnikov

Attachment Content-Type Size
v2-0001-Fix-race-with-LLVM-compilation-and-bison-code-gen.patch text/x-patch 1.5 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message jian he 2026-03-30 08:07:51 Re: implement CAST(expr AS type FORMAT 'template')
Previous Message Jim Jones 2026-03-30 07:45:07 Re: Add max_wal_replay_size connection parameter to libpq