On 01/29/2018 11:17 PM, Andres Freund wrote: > On 2018-01-29 23:01:14 +0100, Tomas Vondra wrote: >> On 01/29/2018 10:57 PM, Andres Freund wrote: >>> Hi, >>> >>> On 2018-01-29 22:51:38 +0100, Tomas Vondra wrote: >>>> Hi, I wanted to look at this, but my attempts to build the jit branch >>>> fail with some compile-time warnings (uninitialized variables) and >>>> errors (unknown types, incorrect number of arguments). See the file >>>> attached. >>> >>> Which git hash are you building? What llvm version is this building >>> against? If you didn't specify LLVM_CONFIG=... what does llvm-config >>> --version return? >>> >> >> I'm building against fdc6c7a6dddbd6df63717f2375637660bcd00fc6 (current >> HEAD in the jit branch, AFAICS). > > The warnings come from an incomplete patch I probably shouldn't have > pushed (Heavily-WIP: JIT hashing.). They should largely be irrelevant > (although will cause a handful of "ERROR: hm" regression failures), > but I'll definitely pop that commit on the next rebase. If you want you > can just reset --hard to its parent. >
OK > > That errors are weird however: > >> ... ^ > >> I'm building like this: >> >> $ ./configure --enable-debug CFLAGS="-fno-omit-frame-pointer -O2" \ >> --with-llvm --prefix=/home/postgres/pg-llvm >> >> $ make -s -j4 install >> >> and llvm-config --version says this: >> >> $ llvm-config --version >> 5.0.0svn > > Is thta llvm-config the one in /usr/local/include/ referenced by the > error message above? I don't see it referenced anywhere, but it comes from here: $ which llvm-config /usr/local/bin/llvm-config > Or is it possible that llvm-config is from a different version than > the one the compiler picks the headers up from? > I don't think so. I don't have any other llvm versions installed, AFAICS. > could you go to src/backend/lib, rm llvmjit.o, and show the full output > of make llvmjit.o? > Attached. > I wonder whether the issue is that my configure patch does > -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; > rather than > -I*|-D*) CPPFLAGS="$pgac_option $CPPFLAGS";; > and that it thus picks up the wrong header first? > I've tried this configure tweak: if test -n "$LLVM_CONFIG"; then for pgac_option in `$LLVM_CONFIG --cflags`; do case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + -I*|-D*) CPPFLAGS="$pgac_option $CPPFLAGS";; esac done and that indeed changes the failure to this: Writing postgres.bki Writing schemapg.h Writing postgres.description Writing postgres.shdescription llvmjit_error.cpp: In function ‘void llvm_enter_fatal_on_oom()’: llvmjit_error.cpp:61:3: error: ‘install_bad_alloc_error_handler’ is not a member of ‘llvm’ llvm::install_bad_alloc_error_handler(fatal_llvm_new_handler); ^~~~ llvmjit_error.cpp: In function ‘void llvm_leave_fatal_on_oom()’: llvmjit_error.cpp:77:3: error: ‘remove_bad_alloc_error_handler’ is not a member of ‘llvm’ llvm::remove_bad_alloc_error_handler(); ^~~~ llvmjit_error.cpp: In function ‘void llvm_reset_fatal_on_oom()’: llvmjit_error.cpp:92:3: error: ‘remove_bad_alloc_error_handler’ is not a member of ‘llvm’ llvm::remove_bad_alloc_error_handler(); ^~~~ make[3]: *** [<builtin>: llvmjit_error.o] Error 1 make[2]: *** [common.mk:45: lib-recursive] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [Makefile:38: all-backend-recurse] Error 2 make: *** [GNUmakefile:11: all-src-recurse] Error 2 I'm not sure what that means, though ... maybe I really have system broken in some strange way. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -fno-omit-frame-pointer -O2 -I../../../src/include -D_GNU_SOURCE -I/usr/local/include -DNDEBUG -DLLVM_BUILD_GLOBAL_ISEL -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -c -o llvmjit.o llvmjit.c llvmjit.c: In function ‘llvm_get_function’: llvmjit.c:239:45: warning: passing argument 2 of ‘LLVMOrcGetSymbolAddress’ from incompatible pointer type [-Wincompatible-pointer-types] if (LLVMOrcGetSymbolAddress(llvm_opt0_orc, &addr, mangled)) ^ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:129:22: note: expected ‘const char *’ but argument is of type ‘LLVMOrcTargetAddress * {aka long unsigned int *}’ LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, ^~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:239:6: error: too many arguments to function ‘LLVMOrcGetSymbolAddress’ if (LLVMOrcGetSymbolAddress(llvm_opt0_orc, &addr, mangled)) ^~~~~~~~~~~~~~~~~~~~~~~ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:129:22: note: declared here LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, ^~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:243:45: warning: passing argument 2 of ‘LLVMOrcGetSymbolAddress’ from incompatible pointer type [-Wincompatible-pointer-types] if (LLVMOrcGetSymbolAddress(llvm_opt3_orc, &addr, mangled)) ^ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:129:22: note: expected ‘const char *’ but argument is of type ‘LLVMOrcTargetAddress * {aka long unsigned int *}’ LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, ^~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:243:6: error: too many arguments to function ‘LLVMOrcGetSymbolAddress’ if (LLVMOrcGetSymbolAddress(llvm_opt3_orc, &addr, mangled)) ^~~~~~~~~~~~~~~~~~~~~~~ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:129:22: note: declared here LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, ^~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c: In function ‘llvm_compile_module’: llvmjit.c:383:3: error: unknown type name ‘LLVMSharedModuleRef’ LLVMSharedModuleRef smod; ^~~~~~~~~~~~~~~~~~~ llvmjit.c:388:10: warning: implicit declaration of function ‘LLVMOrcMakeSharedModule’ [-Wimplicit-function-declaration] smod = LLVMOrcMakeSharedModule(context->module); ^~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:389:48: warning: passing argument 2 of ‘LLVMOrcAddEagerlyCompiledIR’ from incompatible pointer type [-Wincompatible-pointer-types] if (LLVMOrcAddEagerlyCompiledIR(compile_orc, &orc_handle, smod, ^ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:98:1: note: expected ‘LLVMModuleRef {aka struct LLVMOpaqueModule *}’ but argument is of type ‘LLVMOrcModuleHandle * {aka unsigned int *}’ LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, ^~~~~~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:389:61: warning: passing argument 3 of ‘LLVMOrcAddEagerlyCompiledIR’ makes pointer from integer without a cast [-Wint-conversion] if (LLVMOrcAddEagerlyCompiledIR(compile_orc, &orc_handle, smod, ^~~~ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:98:1: note: expected ‘LLVMOrcSymbolResolverFn {aka long unsigned int (*)(const char *, void *)}’ but argument is of type ‘int’ LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, ^~~~~~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:389:7: error: too many arguments to function ‘LLVMOrcAddEagerlyCompiledIR’ if (LLVMOrcAddEagerlyCompiledIR(compile_orc, &orc_handle, smod, ^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from llvmjit.c:45:0: /usr/local/include/llvm-c/OrcBindings.h:98:1: note: declared here LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, ^~~~~~~~~~~~~~~~~~~~~~~~~~~ llvmjit.c:394:3: warning: implicit declaration of function ‘LLVMOrcDisposeSharedModuleRef’ [-Wimplicit-function-declaration] LLVMOrcDisposeSharedModuleRef(smod); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make: *** [<builtin>: llvmjit.o] Error 1