aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/dwarf2read.c15
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.ada/var_rec_arr.exp6
4 files changed, 30 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 605eb39..437dbc2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-23 Joel Brobecker <brobecker@adacore.com>
+
+ * dwarf2read.c (read_structure_type): Set the type's length
+ to zero if it has a DW_AT_byte_size attribute which is not
+ a constant.
+
2015-11-23 Tristan Gingold <gingold@adacore.com>
* darwin-nat.c (darwin_ptrace): Avoid a cast.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 48921e7..298757c 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -13218,7 +13218,20 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf2_attr (die, DW_AT_byte_size, cu);
if (attr)
{
- TYPE_LENGTH (type) = DW_UNSND (attr);
+ if (attr_form_is_constant (attr))
+ TYPE_LENGTH (type) = DW_UNSND (attr);
+ else
+ {
+ /* For the moment, dynamic type sizes are not supported
+ by GDB's struct type. The actual size is determined
+ on-demand when resolving the type of a given object,
+ so set the type's length to zero for now. Otherwise,
+ we record an expression as the length, and that expression
+ could lead to a very large value, which could eventually
+ lead to us trying to allocate that much memory when creating
+ a value of that type. */
+ TYPE_LENGTH (type) = 0;
+ }
}
else
{
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 68ede89..ee01eb6 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-11-23 Joel Brobecker <brobecker@adacore.com>
+
+ * testsuite/gdb.ada/var_rec_arr.exp: Add "ptype a1(1)" test.
+
2015-11-20 Jose E. Marchesi <jose.marchesi@oracle.com>
* gdb.base/callfuncs.exp (fetch_all_registers): Filter out the
diff --git a/gdb/testsuite/gdb.ada/var_rec_arr.exp b/gdb/testsuite/gdb.ada/var_rec_arr.exp
index 82ca857..66525e7 100644
--- a/gdb/testsuite/gdb.ada/var_rec_arr.exp
+++ b/gdb/testsuite/gdb.ada/var_rec_arr.exp
@@ -49,3 +49,9 @@ gdb_test "print a2(2)" \
gdb_test "print a2(3)" \
" = \\(i => 0, s => \"\"\\)"
+
+gdb_test "ptype a1(1)" \
+ [multi_line "type = record" \
+ " i: pck\\.small_type;" \
+ " s: access array \\((<>|1 \\.\\. i)\\) of character;" \
+ "end record"]