if (!POINTER_TYPE_P (TREE_TYPE (addr)))
addr = build1 (ADDR_EXPR, (TREE_TYPE (addr)), addr);
- if (tree dstsize = compute_objsize (addr, ostype))
+ if (tree dstsize = compute_objsize (addr, call, ostype))
dst.basesize = wi::to_offset (dstsize);
else if (POINTER_TYPE_P (TREE_TYPE (addr)))
dst.basesize = HOST_WIDE_INT_MIN;
if (!POINTER_TYPE_P (TREE_TYPE (addr)))
addr = build1 (ADDR_EXPR, (TREE_TYPE (addr)), addr);
- if (tree srcsize = compute_objsize (addr, ostype))
+ if (tree srcsize = compute_objsize (addr, call, ostype))
src.basesize = wi::to_offset (srcsize);
else if (POINTER_TYPE_P (TREE_TYPE (addr)))
src.basesize = HOST_WIDE_INT_MIN;
offset_int orng[2];
tree off = pref->eval (TREE_OPERAND (aref, 1));
range_query *const rvals = qry ? qry->rvals : NULL;
- if (!get_offset_range (off, NULL, orng, rvals))
+ if (!get_offset_range (off, stmt, orng, rvals))
{
/* Set ORNG to the maximum offset representable in ptrdiff_t. */
orng[1] = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
offset_int orng[2];
tree off = pref->eval (TREE_OPERAND (mref, 1));
range_query *const rvals = qry ? qry->rvals : NULL;
- if (!get_offset_range (off, NULL, orng, rvals))
+ if (!get_offset_range (off, stmt, orng, rvals))
{
/* Set ORNG to the maximum offset representable in ptrdiff_t. */
orng[1] = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
offset_int orng[2];
tree off = pref->eval (TREE_OPERAND (ptr, 1));
- if (get_offset_range (off, NULL, orng, rvals))
+ if (get_offset_range (off, stmt, orng, rvals))
pref->add_offset (orng[0], orng[1]);
else
pref->add_max_offset ();
once callers transition to one of the two above. */
tree
-compute_objsize (tree ptr, int ostype, tree *pdecl /* = NULL */,
+compute_objsize (tree ptr, gimple *stmt, int ostype, tree *pdecl /* = NULL */,
tree *poff /* = NULL */, range_query *rvals /* = NULL */)
{
/* Set the initial offsets to zero and size to negative to indicate
none has been computed yet. */
access_ref ref;
- tree size = compute_objsize (ptr, nullptr, ostype, &ref, rvals);
+ tree size = compute_objsize (ptr, stmt, ostype, &ref, rvals);
if (!size || !ref.base0)
return NULL_TREE;
}
/* Legacy/transitional API. Should not be used in new code. */
-extern tree compute_objsize (tree, int, tree * = nullptr, tree * = nullptr,
- range_query * = nullptr);
+extern tree compute_objsize (tree, gimple *, int, tree * = nullptr,
+ tree * = nullptr, range_query * = nullptr);
+inline tree compute_objsize (tree ptr, int ostype, tree *pdecl = nullptr,
+ tree *poff = nullptr, range_query *rvals = nullptr)
+{
+ return compute_objsize (ptr, nullptr, ostype, pdecl, poff, rvals);
+}
/* Return the field at the constant offset. */
extern tree field_at_offset (tree, tree, HOST_WIDE_INT,