aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2012-05-31 13:40:03 +0000
committerEric Botcazou <ebotcazou@adacore.com>2012-05-31 13:40:03 +0000
commit9e7337a2ed2431814ee93d367c6f75a52452124b (patch)
treec0d15f7d75f8cf76f0c8d683165904a59be7ad35 /gcc/tree-sra.c
parent8ea63c53850ae352bb707ab78007d04b070fc070 (diff)
* tree-dfa.c (get_ref_base_and_extent): Compute the offset using
double ints throughout. * tree-sra.c (build_user_friendly_ref_for_offset) <RECORD_TYPE>: Check that the position of the field is representable as an integer. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@188060 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 650d9b110ab..2e3e97898fe 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1549,17 +1549,20 @@ build_user_friendly_ref_for_offset (tree *res, tree type, HOST_WIDE_INT offset,
for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
{
HOST_WIDE_INT pos, size;
- tree expr, *expr_ptr;
+ tree tr_pos, expr, *expr_ptr;
if (TREE_CODE (fld) != FIELD_DECL)
continue;
- pos = int_bit_position (fld);
+ tr_pos = bit_position (fld);
+ if (!tr_pos || !host_integerp (tr_pos, 1))
+ continue;
+ pos = TREE_INT_CST_LOW (tr_pos);
gcc_assert (TREE_CODE (type) == RECORD_TYPE || pos == 0);
tr_size = DECL_SIZE (fld);
if (!tr_size || !host_integerp (tr_size, 1))
continue;
- size = tree_low_cst (tr_size, 1);
+ size = TREE_INT_CST_LOW (tr_size);
if (size == 0)
{
if (pos != offset)