public inbox for [email protected]  
help / color / mirror / Atom feed
From: Maksim.Melnikov <[email protected]>
To: Andres Freund <[email protected]>
Cc: [email protected]
Subject: Re: Fix race with LLVM and bison.
Date: Mon, 30 Mar 2026 10:56:02 +0300
Message-ID: <[email protected]> (raw)
In-Reply-To: <v67jke2iv6kaywjnvwhxc3u5x3ttvrz555k5ngcxu2qwu435rl@5wpsxnrsz23k>
References: <[email protected]>
	<v67jke2iv6kaywjnvwhxc3u5x3ttvrz555k5ngcxu2qwu435rl@5wpsxnrsz23k>

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


Attachments:

  [text/x-patch] v2-0001-Fix-race-with-LLVM-compilation-and-bison-code-gen.patch (1.5K, 2-v2-0001-Fix-race-with-LLVM-compilation-and-bison-code-gen.patch)
  download | inline diff:
From 0f722396846277387c88606addbaa8160f3eee9e Mon Sep 17 00:00:00 2001
From: Maksim Melnikov <[email protected]>
Date: Fri, 27 Mar 2026 13:33:09 +0300
Subject: [PATCH v2] Fix race with LLVM compilation and bison code generation.

In case when source file is compiled with LLVM and include header file
that should be generated by bison, compile error can occur, example:

cubescan.c:9:10: fatal error: 'cubeparse.h' file not found
    9 | #include "cubeparse.h"

The reason is race, that exist between LLVM compilation and bison code
generation and compilation can occur first. Ideally LLVM compilation
target should depend on .o files targets.
---
 contrib/cube/Makefile | 4 ++++
 contrib/seg/Makefile  | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/contrib/cube/Makefile b/contrib/cube/Makefile
index dfb0d806e4b..d84ad3fc3e9 100644
--- a/contrib/cube/Makefile
+++ b/contrib/cube/Makefile
@@ -35,6 +35,10 @@ endif
 cubeparse.h: cubeparse.c
 	touch $@
 
+ifeq ($(with_llvm), yes)
+cubescan.bc: cubescan.o
+endif
+
 cubeparse.c: BISONFLAGS += -d
 
 # Force these dependencies to be known even without dependency info built:
diff --git a/contrib/seg/Makefile b/contrib/seg/Makefile
index b408f4049cb..dde996ca5c5 100644
--- a/contrib/seg/Makefile
+++ b/contrib/seg/Makefile
@@ -34,6 +34,10 @@ endif
 segparse.h: segparse.c
 	touch $@
 
+ifeq ($(with_llvm), yes)
+segscan.bc: segscan.o
+endif
+
 segparse.c: BISONFLAGS += -d
 
 # Force these dependencies to be known even without dependency info built:
-- 
2.43.0



view thread (4+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: Fix race with LLVM and bison.
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox