diff --git a/libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp b/libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp --- a/libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp +++ b/libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp @@ -643,17 +643,14 @@ void streampos_test() { std::streampos test0 = 67; - ComparePrettyPrintToChars( - test0, "std::fpos with stream offset:67 with state: {count:0 value:0}"); + ComparePrettyPrintToRegex(test0, "^std::fpos with stream offset:67( with state: {count:0 value:0})?$"); std::istringstream input("testing the input stream here"); std::streampos test1 = input.tellg(); - ComparePrettyPrintToChars( - test1, "std::fpos with stream offset:0 with state: {count:0 value:0}"); + ComparePrettyPrintToRegex(test1, "^std::fpos with stream offset:0( with state: {count:0 value:0})?$"); std::unique_ptr buffer(new char[5]); input.read(buffer.get(), 5); test1 = input.tellg(); - ComparePrettyPrintToChars( - test1, "std::fpos with stream offset:5 with state: {count:0 value:0}"); + ComparePrettyPrintToRegex(test1, "^std::fpos with stream offset:5( with state: {count:0 value:0})?$"); } int main(int, char**) { diff --git a/libcxx/utils/gdb/libcxx/printers.py b/libcxx/utils/gdb/libcxx/printers.py --- a/libcxx/utils/gdb/libcxx/printers.py +++ b/libcxx/utils/gdb/libcxx/printers.py @@ -757,10 +757,18 @@ typename = _remove_generics(_prettify_typename(self.val.type)) offset = self.val["__off_"] state = self.val["__st_"] - count = state["__count"] - value = state["__value"]["__wch"] - return "%s with stream offset:%s with state: {count:%s value:%s}" % ( - typename, offset, count, value) + + state_fields = [] + if state.type.code == gdb.TYPE_CODE_STRUCT: + state_fields = [f.name for f in state.type.fields()] + + state_string = "" + if "__count" in state_fields and "__value" in state_fields: + count = state["__count"] + value = state["__value"]["__wch"] + state_string = " with state: {count:%s value:%s}" % (count, value) + + return "%s with stream offset:%s%s" % (typename, offset, state_string) class AbstractUnorderedCollectionPrinter(object):