aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-04-22 19:39:56 -0600
committerTom Tromey <tom@tromey.com>2021-04-22 19:39:56 -0600
commit432ce4cf6800a3693656fde1306d83ce767e2b2a (patch)
treebdcee743c2655bfc754a470e1e64b500d3517239
parentae6a3f81a178760dc2e1dafcb680b69dc4be9a92 (diff)
downloadgdb-432ce4cf6800a3693656fde1306d83ce767e2b2a.zip
gdb-432ce4cf6800a3693656fde1306d83ce767e2b2a.tar.gz
gdb-432ce4cf6800a3693656fde1306d83ce767e2b2a.tar.bz2
Fix ptype/o bug with "<no data fields>"
I noticed that when using ptype/o, the "<no data fields>" text that may be emitted is indented incorrectly. This patch fixes the bug and adds a new test case. I also removed a stray backslash from ptype-offsets.exp that I noticed while writing the test. This seemed too trivial to warrant a separate patch. gdb/ChangeLog 2021-04-22 Tom Tromey <tom@tromey.com> * c-typeprint.c (c_type_print_base_struct_union): Use print_spaces_filtered_with_print_options. gdb/testsuite/ChangeLog 2021-04-22 Tom Tromey <tom@tromey.com> * gdb.base/ptype-offsets.cc (struct empty_member): New. (main): Use empty_member. * gdb.base/ptype-offsets.exp: Add new test.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/c-typeprint.c7
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.base/ptype-offsets.cc7
-rw-r--r--gdb/testsuite/gdb.base/ptype-offsets.exp17
5 files changed, 37 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 67de5ca..5d869db 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2021-04-22 Tom Tromey <tom@tromey.com>
+
+ * c-typeprint.c (c_type_print_base_struct_union): Use
+ print_spaces_filtered_with_print_options.
+
2021-04-22 Simon Marchi <simon.marchi@polymtl.ca>
PR gdb/27757
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index f81f1c2..72616a5 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -1121,13 +1121,12 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
if (type->num_fields () == 0 && TYPE_NFN_FIELDS (type) == 0
&& TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
{
+ print_spaces_filtered_with_print_options (level + 4, stream, flags);
if (type->is_stub ())
- fprintf_filtered (stream, _("%*s%p[<incomplete type>%p]\n"),
- level + 4, "",
+ fprintf_filtered (stream, _("%p[<incomplete type>%p]\n"),
metadata_style.style ().ptr (), nullptr);
else
- fprintf_filtered (stream, _("%*s%p[<no data fields>%p]\n"),
- level + 4, "",
+ fprintf_filtered (stream, _("%p[<no data fields>%p]\n"),
metadata_style.style ().ptr (), nullptr);
}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 266645b..1a181f3 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2021-04-22 Tom Tromey <tom@tromey.com>
+
+ * gdb.base/ptype-offsets.cc (struct empty_member): New.
+ (main): Use empty_member.
+ * gdb.base/ptype-offsets.exp: Add new test.
+
2021-04-22 Simon Marchi <simon.marchi@polymtl.ca>
* gdb.python/flexible-array-member.exp: Add check for Python
diff --git a/gdb/testsuite/gdb.base/ptype-offsets.cc b/gdb/testsuite/gdb.base/ptype-offsets.cc
index 4582af4..dc21e34 100644
--- a/gdb/testsuite/gdb.base/ptype-offsets.cc
+++ b/gdb/testsuite/gdb.base/ptype-offsets.cc
@@ -185,6 +185,12 @@ struct static_member
int abc;
};
+struct empty_member
+{
+ struct { } empty;
+ int an_int;
+};
+
int
main (int argc, char *argv[])
{
@@ -196,6 +202,7 @@ main (int argc, char *argv[])
struct asd f;
uint8_t i;
static_member stmember;
+ empty_member emember;
return 0;
}
diff --git a/gdb/testsuite/gdb.base/ptype-offsets.exp b/gdb/testsuite/gdb.base/ptype-offsets.exp
index f466db9..0a0bbc8 100644
--- a/gdb/testsuite/gdb.base/ptype-offsets.exp
+++ b/gdb/testsuite/gdb.base/ptype-offsets.exp
@@ -336,7 +336,22 @@ gdb_test "ptype/o static_member" \
[string_to_regexp [multi_line \
"/* offset | size */ type = struct static_member \{" \
" static static_member Empty;" \
-"\/* 0 | 4 */ int abc;" \
+"/* 0 | 4 */ int abc;" \
"" \
" /* total size (bytes): 4 */" \
" \}"]]
+
+# Test that the "no data fields" text is indented properly.
+gdb_test "ptype/o empty_member" \
+ [string_to_regexp [multi_line \
+"/* offset | size */ type = struct empty_member \{" \
+"/* 0 | 1 */ struct {" \
+" <no data fields>" \
+"" \
+" /* total size (bytes): 1 */" \
+" } empty;" \
+"/* XXX 3-byte hole */" \
+"/* 4 | 4 */ int an_int;" \
+"" \
+" /* total size (bytes): 8 */" \
+" \}"]]