Commit a3de5951 by Andrew MacLeod Committed by Andrew Macleod

expr.c (string_constant): Account for non-zero lower bound arrays.


2006-12-07  Andrew Macleod  <amacleod@redhat.com>

	* expr.c (string_constant): Account for non-zero lower bound arrays.

From-SVN: r119623
parent 5eab7e7a
2006-12-07 Andrew Macleod <amacleod@redhat.com>
* expr.c (string_constant): Account for non-zero lower bound arrays.
2006-12-07 Richard Guenther <rguenther@suse.de>
* builtins.c (expand_builtin_pow): Adjust predicates for
......
......@@ -8923,7 +8923,7 @@ is_aligning_offset (tree offset, tree exp)
tree
string_constant (tree arg, tree *ptr_offset)
{
tree array, offset;
tree array, offset, lower_bound;
STRIP_NOPS (arg);
if (TREE_CODE (arg) == ADDR_EXPR)
......@@ -8945,6 +8945,20 @@ string_constant (tree arg, tree *ptr_offset)
if (TREE_CODE (array) != STRING_CST
&& TREE_CODE (array) != VAR_DECL)
return 0;
/* Check if the array has a non-zero lower bound. */
lower_bound = array_ref_low_bound (TREE_OPERAND (arg, 0));
if (!integer_zerop (lower_bound))
{
/* If the offset and base aren't both constants, return 0. */
if (TREE_CODE (lower_bound) != INTEGER_CST)
return 0;
if (TREE_CODE (offset) != INTEGER_CST)
return 0;
/* Adjust offset by the lower bound. */
offset = size_diffop (fold_convert (sizetype, offset),
fold_convert (sizetype, lower_bound));
}
}
else
return 0;
......
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