From: Nathan Sidwell Date: Fri, 5 Nov 2004 10:56:01 +0000 (+0000) Subject: re PR tree-optimization/18307 (merge_pointed_to_info called incorrectly) X-Git-Tag: releases/gcc-4.0.0~3401 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0cde4a2c32bf281ce6d758f8db3bfd47be3ce5d3;p=thirdparty%2Fgcc.git re PR tree-optimization/18307 (merge_pointed_to_info called incorrectly) PR tree-optimization/18307 * tree-ssa-alias.c (merge_pointed_to_info): Protected against DEST and ORIG being the same node. From-SVN: r90120 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3cb64e968f6..7ad955160b82 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-05 Nathan Sidwell + + PR tree-optimization/18307 + * tree-ssa-alias.c (merge_pointed_to_info): Protected against DEST + and ORIG being the same node. + 2004-11-04 Geoffrey Keating * Makefile.in (distclean): Don't delete nonexistent fixinc/ directory. diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 976f2d1b0fc9..8e424275b173 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -1687,14 +1687,21 @@ set_pt_malloc (tree ptr) } -/* Given two pointers DEST and ORIG. Merge the points-to information in - ORIG into DEST. AI is as in collect_points_to_info. */ +/* Given two different pointers DEST and ORIG. Merge the points-to + information in ORIG into DEST. AI is as in + collect_points_to_info. */ static void merge_pointed_to_info (struct alias_info *ai, tree dest, tree orig) { struct ptr_info_def *dest_pi, *orig_pi; + /* FIXME: It is erroneous to call this function with identical + nodes, however that currently occurs during bootstrap. This check + stops further breakage. PR 18307 documents the issue. */ + if (dest == orig) + return; + /* Make sure we have points-to information for ORIG. */ collect_points_to_info_for (ai, orig); @@ -1725,6 +1732,8 @@ merge_pointed_to_info (struct alias_info *ai, tree dest, tree orig) smart enough to determine that the two come from the same malloc call. Copy propagation before aliasing should cure this. */ + gcc_assert (orig_pi != dest_pi); + dest_pi->pt_malloc = 0; if (orig_pi->pt_malloc || orig_pi->pt_anything)