From: Andrew Pinski Date: Fri, 18 Feb 2005 14:31:50 +0000 (+0000) Subject: re PR middle-end/20030 (Broken arguments access) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d56ab334872d2d97abc2a7243839675556dd60e;p=gcc.git re PR middle-end/20030 (Broken arguments access) 2005-02-18 Andrew Pinski PR middle-end/20030 * fold-const.c (fold_indirect_ref_1): Use the correct index for zero access, the lower bound of the array type if it exists. From-SVN: r95226 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61ea0ad332c..97c9e90017c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-02-18 Andrew Pinski + + PR middle-end/20030 + * fold-const.c (fold_indirect_ref_1): Use the correct index for zero access, + the lower bound of the array type if it exists. + 2005-02-18 Alexandre Oliva PR c++/20008 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 27e16ae95cf..a04c0617724 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -11258,15 +11258,26 @@ fold_indirect_ref_1 (tree t) /* *(foo *)&fooarray => fooarray[0] */ else if (TREE_CODE (optype) == ARRAY_TYPE && lang_hooks.types_compatible_p (type, TREE_TYPE (optype))) - return build4 (ARRAY_REF, type, op, size_zero_node, NULL_TREE, NULL_TREE); + { + tree type_domain = TYPE_DOMAIN (optype); + tree min_val = size_zero_node; + if (type_domain && TYPE_MIN_VALUE (type_domain)) + min_val = TYPE_MIN_VALUE (type_domain); + return build4 (ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE); + } } /* *(foo *)fooarrptr => (*fooarrptr)[0] */ if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE && lang_hooks.types_compatible_p (type, TREE_TYPE (TREE_TYPE (subtype)))) { + tree type_domain; + tree min_val = size_zero_node; sub = build_fold_indirect_ref (sub); - return build4 (ARRAY_REF, type, sub, size_zero_node, NULL_TREE, NULL_TREE); + type_domain = TYPE_DOMAIN (TREE_TYPE (sub)); + if (type_domain && TYPE_MIN_VALUE (type_domain)) + min_val = TYPE_MIN_VALUE (type_domain); + return build4 (ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE); } return NULL_TREE;