summaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-13 10:07:14 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-13 10:07:14 +0000
commit4203dd9b95c4f8e1d85a0a39a5f9d7e6797806ac (patch)
tree536c5db89f67f2f5f29306b79c7e0b96cc6b6c45 /gcc/dwarf2out.c
parentd2c42908eeedbbddc83da5a0339f8174df787541 (diff)
downloadgcc-4203dd9b95c4f8e1d85a0a39a5f9d7e6797806ac.tar.gz
PR ada/35998
* dwarf2out.c (add_byte_size_attribute): Also use int_size_in_bytes for fields. Do not add the attribute if the size is negative. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204736 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index d661bd7076c..3822a652d80 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -16318,11 +16318,13 @@ add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
}
}
+/* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size. */
+
static void
add_byte_size_attribute (dw_die_ref die, tree tree_node)
{
dw_die_ref decl_die;
- unsigned size;
+ HOST_WIDE_INT size;
switch (TREE_CODE (tree_node))
{
@@ -16346,7 +16348,7 @@ add_byte_size_attribute (dw_die_ref die, tree tree_node)
generally given as the number of bytes normally allocated for an
object of the *declared* type of the member itself. This is true
even for bit-fields. */
- size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
+ size = int_size_in_bytes (field_type (tree_node));
break;
default:
gcc_unreachable ();
@@ -16355,8 +16357,9 @@ add_byte_size_attribute (dw_die_ref die, tree tree_node)
/* Note that `size' might be -1 when we get to this point. If it is, that
indicates that the byte size of the entity in question is variable. We
have no good way of expressing this fact in Dwarf at the present time,
- so just let the -1 pass on through. */
- add_AT_unsigned (die, DW_AT_byte_size, size);
+ when location description was not used by the caller code instead. */
+ if (size >= 0)
+ add_AT_unsigned (die, DW_AT_byte_size, size);
}
/* For a FIELD_DECL node which represents a bit-field, output an attribute