Use -isystem for LLVM include directories

LLVM's headers produce warnings under some of the warning options we
might like to use.  For example, -Wshadow=local reports several
warnings from LLVM's headers when compiling llvmjit_inline.cpp.  To
work around that, add the include directories reported by llvm-config
with -isystem rather than -I, which makes the compiler treat them as
system headers and not report warnings from them.  In meson, this is a
built-in facility of the dependency() function, in configure we
implement it ourselves.

An alternative solution would have been to use "#pragma GCC
system_header", as is already done elsewhere in the tree.  But that
seems less elegant here.  Either, we would have to potentially create
a separate wrapper for each LLVM header, or we would have to route all
LLVM includes through a common header, which would break modularity.

Reviewed-by: Peter Geoghegan <pg@bowt.ie>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/84b6f128-91f5-480e-8a9e-7d0e8f538cea%40eisentraut.org
This commit is contained in:
Peter Eisentraut committed 2026-09-12 12:40:24 +02:00
1 parent 512d3e8919
commit 704ef84ef2
3 files changed
+14 -5

No files matched your search

+5 -2
View File
@@ -46,10 +46,13 @@ AC_DEFUN([PGAC_LLVM_SUPPORT],
# clear what the minimum version is.
# Collect compiler flags necessary to build the LLVM dependent
# shared library.
# shared library. The include directories are added with -isystem
# rather than -I, so that warnings from LLVM's own headers are not
# reported under the warning options we select for our own code.
for pgac_option in `$LLVM_CONFIG --cppflags`; do
case $pgac_option in
-I*|-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
-I*) LLVM_CPPFLAGS="-isystem ${pgac_option#-I} $LLVM_CPPFLAGS";;
-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
esac
done
Vendored
+5 -2
View File
@@ -5105,10 +5105,13 @@ fi
# clear what the minimum version is.
# Collect compiler flags necessary to build the LLVM dependent
# shared library.
# shared library. The include directories are added with -isystem
# rather than -I, so that warnings from LLVM's own headers are not
# reported under the warning options we select for our own code.
for pgac_option in `$LLVM_CONFIG --cppflags`; do
case $pgac_option in
-I*|-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
-I*) LLVM_CPPFLAGS="-isystem ${pgac_option#-I} $LLVM_CPPFLAGS";;
-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
esac
done
+4 -1
View File
@@ -924,7 +924,10 @@ endif
llvmopt = get_option('llvm')
llvm = not_found_dep
if have_cxx
llvm = dependency('llvm', version: '>=14', method: 'config-tool', required: llvmopt)
# Use include_type 'system' so that warnings from LLVM's own headers are
# not reported under the warning options we select for our own code.
llvm = dependency('llvm', version: '>=14', method: 'config-tool',
include_type: 'system', required: llvmopt)
if llvm.found()