Ignore static members in NoOpStructPrinter
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gdb_build--master-arm |
success
|
Testing passed
|
Commit Message
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(-)
@@ -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])
@@ -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;
@@ -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"
+ }
}
}