[odb-users] Internal compiler error linked to spdlog

Boris Kolpackov boris at codesynthesis.com
Mon May 4 10:11:21 EDT 2020


Sean Clarke <sean.clarke at sec-consulting.co.uk> writes:

> Has anyone else seen anything similar?

I was able to reproduce and fix this based on your description (details
for those interested below).

I've also staged the fix so if you would like to give it a try, just
follow the build2-based installation instructions[1] but use this
repository:

https://stage.build2.org/1

Instead of:

https://pkg.cppget.org/1/beta

To get ODB.

(I believe you should be able to use the 0.12.0 build2 toolchain but if
not, upgrade to staged[2].)

Now, if anyone is interested, the problem was caused by this code in
spdlog:

namespace spdlog
{
  class logger
  {
    log_err_handler err_handler_{[this](const std::string &msg) { this->default_err_handler_(msg); }};
  }
}

It appears that in GCC's AST this is represented as an injected into
the spdlog namespace class-type that implements the lambda. It turns
out such a type cannot be treated as an ordinary class which is what
ODB tried to do. The fix is simply to ignore such lambda classes since
there is nothing interesting about them from the ODB's POV.

Here is the commit that fixes this:

https://git.codesynthesis.com/cgit/odb/odb/commit/?id=ba69cf5f0d916c4fdc943f2171691e074417f2e8

[1] https://codesynthesis.com/products/odb/doc/install-build2.xhtml
[2] https://build2.org/community.xhtml#stage



More information about the odb-users mailing list