On Thu, Feb 1, 2018 at 8:16 PM, Thomas Munro <thomas.mu...@enterprisedb.com> wrote: > On Fri, Feb 2, 2018 at 2:05 PM, Andres Freund <and...@anarazel.de> wrote: >> On 2018-02-01 09:32:17 -0800, Jeff Davis wrote: >>> On Wed, Jan 31, 2018 at 12:03 AM, Konstantin Knizhnik >>> <k.knizh...@postgrespro.ru> wrote: >>> > The same problem takes place with old versions of GCC: I have to upgrade >>> > GCC >>> > to 7.2 to make it possible to compile this code. >>> > The problem in not in compiler itself, but in libc++ headers. >>> >>> How can I get this branch to compile on ubuntu 16.04? I have llvm-5.0 >>> and gcc-5.4 installed. Do I need to compile with clang or gcc? Any >>> CXXFLAGS required? >> >> Just to understand: You're running in the issue with the header being >> included from within the extern "C" {}? Hm, I've pushed a quick fix for >> that. > > That change wasn't quite enough: to get this building against libc++ > (Clang's native stdlb) I also needed this change to llvmjit.h so that > <llvm-c/Types.h> wouldn't be included with the wrong linkage (perhaps > you can find a less ugly way): > > +#ifdef __cplusplus > +} > +#endif > #include <llvm-c/Types.h> > +#ifdef __cplusplus > +extern "C" > +{ > +#endif
This did the trick -- thanks. Sitting through 20 minute computer crashing link times really brings back C++ nightmares -- if anyone else needs to compile llvm/clang as I did (I'm stuck on 3.2 with my aging mint box), I strongly encourage you to use the gold linker. Question: when watching the compilation log, I see quite a few files being compiled with both O2 and O1, for example: clang -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -O1 -Wno-ignored-attributes -Wno-unknown-warning-option -Wno-ignored-optimization-argument -I../../../../src/include -D_GNU_SOURCE -I/home/mmoncure/llvm/include -DLLVM_BUILD_GLOBAL_ISEL -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -flto=thin -emit-llvm -c -o nbtsort.bc nbtsort.c Is this intentional? (didn't check standard compilation, it just jumped out). merlin