[Bug libstdc++/87308] pretty printer for std::any fails with: Python Exception <type 'exceptions.ValueError'> Unknown manager function in std::any

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Nov 23 13:19:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87308

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jeff Garrett from comment #0)
> Note that both a1 and a2 are interpreted as holding type main::{lambda()#2},
> but a1 actually holds main::{lambda()#1}.

I can fix the regex to work for lambdas, but I'm not sure what to do about that
part.

The debuginfo for the manager just shows the type as "main()::<lambda()>" which
doesn't uniquely identify the type. The function's gdb.Symbol.linkage_name
property (which is supposed to be the mangled name) is the same as its
gdb.Symbol.name, so that doesn't help.

The problem isn't specific to lambdas, but to any local type:

#include <any>
int main()
{
  std::any a3, a4;

  {
    struct local { } l;
    a3 = l;
  }

  {
    struct local { int i = 2; } l2;
    a4 = l2;
  }

  __builtin_trap();
}

g++ -std=c++17 87308.cc && gdb -q -ex r -ex "p a3" -ex "p a4" -ex qq a.out
Reading symbols from a.out...done.
Starting program: /tmp/a.out 

Program received signal SIGILL, Illegal instruction.
main () at 87308.cc:16
16        __builtin_trap();
$1 = std::any containing local = {[contained value] = {i = 0}}
$2 = std::any containing local = {[contained value] = {i = 2}}


More information about the Gcc-bugs mailing list