public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Ignore static members in NoOpStructPrinter
@ 2023-11-14 14:04 Tom Tromey
  0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2023-11-14 14:04 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

Hannes' patch to show local variables in the TUI pointed out that
NoOpStructPrinter should ignore static members.  This patch implements
this.
---
 gdb/python/lib/gdb/printing.py   |  2 +-
 gdb/testsuite/gdb.dap/ptrref.cc  | 12 ++++++++++++
 gdb/testsuite/gdb.dap/ptrref.exp |  9 ++++++++-
 3 files changed, 21 insertions(+), 2 deletions(-)

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 <http://www.gnu.org/licenses/>.  */
 
+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"
+	}
     }
 }
 
-- 
2.41.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-11-14 14:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-14 14:04 [PATCH] Ignore static members in NoOpStructPrinter Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).