diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1e8072db07e4..2d86cc3efb44 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2018-11-23 Jonathan Wakely + + PR libstdc++/87308 (partial) + * python/libstdcxx/v6/printers.py (StdExpAnyPrinter): Adjust regex to + work around PR 88166. + * testsuite/libstdc++-prettyprinters/cxx17.cc: Test std::any + containing a local type. + 2018-11-22 Marc Glisse PR libstdc++/87106 diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index 827c87b70ea5..28733385dc97 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -1051,7 +1051,7 @@ class StdExpAnyPrinter(SingleObjContainerPrinter): func = gdb.block_for_pc(int(mgr.cast(gdb.lookup_type('intptr_t')))) if not func: raise ValueError("Invalid function pointer in %s" % self.typename) - rx = r"""({0}::_Manager_\w+<.*>)::_S_manage\({0}::_Op, {0} const\*, {0}::_Arg\*\)""".format(typename) + rx = r"""({0}::_Manager_\w+<.*>)::_S_manage\((enum )?{0}::_Op, (const {0}|{0} const) ?\*, (union )?{0}::_Arg ?\*\)""".format(typename) m = re.match(rx, func.function.name) if not m: raise ValueError("Unknown manager function in %s" % self.typename) diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc index 0c7cb4c9bb6c..d3cd77c74db9 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc @@ -75,6 +75,9 @@ main() // { dg-final { regexp-test as2 {std::any containing const char \* = {\[contained value\] = 0x[[:xdigit:]]+ "stringiest"}} } } any am = *om; // { dg-final { note-test am {std::any containing std::map with 3 elements = {[1] = 2, [3] = 4, [5] = 6}} } } + struct local_type { int i = 99; }; + any al = local_type{}; +// { dg-final { note-test al {std::any containing local_type = {[contained value] = {i = 99}}} } } struct S { operator int() { throw 42; }}; variant v0;