From: Tom Tromey Date: Mon, 13 Nov 2023 21:03:58 +0000 (-0700) Subject: Ignore static members in NoOpStructPrinter X-Git-Tag: binutils-2_42~918 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a1b9a4badc8954221926b231b81392fa625653c;p=thirdparty%2Fbinutils-gdb.git Ignore static members in NoOpStructPrinter Hannes' patch to show local variables in the TUI pointed out that NoOpStructPrinter should ignore static members. This patch implements this. --- diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py index dec1351c2d7..14bd84b5859 100644 --- a/gdb/python/lib/gdb/printing.py +++ b/gdb/python/lib/gdb/printing.py @@ -350,7 +350,7 @@ class NoOpStructPrinter(gdb.ValuePrinter): def children(self): for field in self.__ty.fields(): - if field.name is not None: + if hasattr(field, "bitpos") and field.name is not None: yield (field.name, self.__value[field]) diff --git a/gdb/testsuite/gdb.dap/ptrref.cc b/gdb/testsuite/gdb.dap/ptrref.cc index bfb1afe3d17..c9b83cd0612 100644 --- a/gdb/testsuite/gdb.dap/ptrref.cc +++ b/gdb/testsuite/gdb.dap/ptrref.cc @@ -15,9 +15,21 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +struct some_struct +{ + int x; + int y; + + static int z; +}; + +int some_struct::z = 37; + void func () { + some_struct aggregate { 91, 87 }; + int value = 23; int *ptr = &value; diff --git a/gdb/testsuite/gdb.dap/ptrref.exp b/gdb/testsuite/gdb.dap/ptrref.exp index e0cc74529ab..456774aefbe 100644 --- a/gdb/testsuite/gdb.dap/ptrref.exp +++ b/gdb/testsuite/gdb.dap/ptrref.exp @@ -55,7 +55,7 @@ gdb_assert {[llength $scopes] == 2} "two scopes" lassign $scopes scope reg_scope gdb_assert {[dict get $scope name] == "Locals"} "scope is locals" -gdb_assert {[dict get $scope namedVariables] == 3} "three vars in scope" +gdb_assert {[dict get $scope namedVariables] == 4} "three vars in scope" set num [dict get $scope variablesReference] set refs [lindex [dap_check_request_and_response "fetch variables" \ @@ -97,6 +97,13 @@ foreach var [dict get $refs body variables] { "$name has exactly one child" fetch_pointer $name $var } + "aggregate" { + gdb_assert {[dict get $var variablesReference] != 0} \ + "$name has children" + # This should omit the static field. + gdb_assert {[dict get $var namedVariables] == 2} \ + "$name has exactly 2 children" + } } }