Commit 0ddcd294 by Richard Sandiford Committed by Richard Sandiford

poly_int: get_binfo_at_offset

This patch changes the offset parameter to get_binfo_at_offset
from HOST_WIDE_INT to poly_int64.  This function probably doesn't
need to handle polynomial offsets in practice, but it's easy
to do and avoids forcing the caller to check first.

2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

gcc/
	* tree.h (get_binfo_at_offset): Take the offset as a poly_int64
	rather than a HOST_WIDE_INT.
	* tree.c (get_binfo_at_offset): Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r255932
parent f7ed3195
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
* tree.h (get_binfo_at_offset): Take the offset as a poly_int64
rather than a HOST_WIDE_INT.
* tree.c (get_binfo_at_offset): Likewise.
2017-12-21 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* ipa-prop.h (build_ref_for_offset): Take the offset as a poly_int64 * ipa-prop.h (build_ref_for_offset): Take the offset as a poly_int64
rather than a HOST_WIDE_INT. rather than a HOST_WIDE_INT.
* tree-sra.c (build_ref_for_offset): Likewise. * tree-sra.c (build_ref_for_offset): Likewise.
...@@ -12351,7 +12351,7 @@ lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos) ...@@ -12351,7 +12351,7 @@ lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
found, return, otherwise return NULL_TREE. */ found, return, otherwise return NULL_TREE. */
tree tree
get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type) get_binfo_at_offset (tree binfo, poly_int64 offset, tree expected_type)
{ {
tree type = BINFO_TYPE (binfo); tree type = BINFO_TYPE (binfo);
...@@ -12363,7 +12363,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type) ...@@ -12363,7 +12363,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
if (types_same_for_odr (type, expected_type)) if (types_same_for_odr (type, expected_type))
return binfo; return binfo;
if (offset < 0) if (maybe_lt (offset, 0))
return NULL_TREE; return NULL_TREE;
for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld)) for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
...@@ -12373,7 +12373,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type) ...@@ -12373,7 +12373,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
pos = int_bit_position (fld); pos = int_bit_position (fld);
size = tree_to_uhwi (DECL_SIZE (fld)); size = tree_to_uhwi (DECL_SIZE (fld));
if (pos <= offset && (pos + size) > offset) if (known_in_range_p (offset, pos, size))
break; break;
} }
if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE) if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
...@@ -12381,7 +12381,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type) ...@@ -12381,7 +12381,7 @@ get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
/* Offset 0 indicates the primary base, whose vtable contents are /* Offset 0 indicates the primary base, whose vtable contents are
represented in the binfo for the derived class. */ represented in the binfo for the derived class. */
else if (offset != 0) else if (maybe_ne (offset, 0))
{ {
tree found_binfo = NULL, base_binfo; tree found_binfo = NULL, base_binfo;
/* Offsets in BINFO are in bytes relative to the whole structure /* Offsets in BINFO are in bytes relative to the whole structure
......
...@@ -4856,7 +4856,7 @@ extern void tree_set_block (tree, tree); ...@@ -4856,7 +4856,7 @@ extern void tree_set_block (tree, tree);
extern location_t *block_nonartificial_location (tree); extern location_t *block_nonartificial_location (tree);
extern location_t tree_nonartificial_location (tree); extern location_t tree_nonartificial_location (tree);
extern tree block_ultimate_origin (const_tree); extern tree block_ultimate_origin (const_tree);
extern tree get_binfo_at_offset (tree, HOST_WIDE_INT, tree); extern tree get_binfo_at_offset (tree, poly_int64, tree);
extern bool virtual_method_call_p (const_tree); extern bool virtual_method_call_p (const_tree);
extern tree obj_type_ref_class (const_tree ref); extern tree obj_type_ref_class (const_tree ref);
extern bool types_same_for_odr (const_tree type1, const_tree type2, extern bool types_same_for_odr (const_tree type1, const_tree type2,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment