diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-12-21 07:02:28 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-12-21 07:02:28 +0000 |
commit | 0ddcd294d54bf049bb48fd7face88a1d8254877f (patch) | |
tree | cab559861d82df23cb110c4a88e09d7c00fcea80 /gcc/tree.c | |
parent | f7ed31955b00970413b202e0b4c3144aeec136d5 (diff) | |
download | gcc-0ddcd294d54bf049bb48fd7face88a1d8254877f.zip gcc-0ddcd294d54bf049bb48fd7face88a1d8254877f.tar.gz gcc-0ddcd294d54bf049bb48fd7face88a1d8254877f.tar.bz2 |
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
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -12351,7 +12351,7 @@ lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos) found, return, otherwise return NULL_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); @@ -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)) return binfo; - if (offset < 0) + if (maybe_lt (offset, 0)) return NULL_TREE; 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) pos = int_bit_position (fld); size = tree_to_uhwi (DECL_SIZE (fld)); - if (pos <= offset && (pos + size) > offset) + if (known_in_range_p (offset, pos, size)) break; } 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) /* Offset 0 indicates the primary base, whose vtable contents are represented in the binfo for the derived class. */ - else if (offset != 0) + else if (maybe_ne (offset, 0)) { tree found_binfo = NULL, base_binfo; /* Offsets in BINFO are in bytes relative to the whole structure |