mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 16:39:52 +08:00
re PR tree-optimization/24225 (ICE: segmentation fault in profile.c:branch_prob)
PR tree-optimization/24225 gcc/ * profile.c (branch_prob): Look from end to start through a basic block when looking for a locus. testsuite/ * gcc.dg/pr24225.c: New test. From-SVN: r105857
This commit is contained in:
parent
77c4f044f6
commit
7ffc0411cc
@ -1,3 +1,9 @@
|
||||
2005-10-24 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
PR tree-optimization/24255
|
||||
* profile.c (branch_prob): Look from end to start through a
|
||||
basic block when looking for a locus.
|
||||
|
||||
2005-10-24 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* pa.c (store_reg_modify): Set RTX_FRAME_RELATED_P on each set in
|
||||
@ -83,7 +89,7 @@
|
||||
|
||||
2005-10-20 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
PR tree-optimization/24225
|
||||
PR tree-optimization/24307
|
||||
* tree-cfg.c (tree_find_edge_insert_loc): Handle naked RETURN_EXPR.
|
||||
|
||||
2005-10-20 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
@ -806,13 +806,27 @@ branch_prob (void)
|
||||
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
{
|
||||
tree last = last_stmt (bb);
|
||||
block_stmt_iterator bsi;
|
||||
tree last = NULL;
|
||||
|
||||
/* It may happen that there are compiler generated statements
|
||||
without a locus at all. Go through the basic block from the
|
||||
last to the first statement looking for a locus. */
|
||||
for (bsi = bsi_last (bb); !bsi_end_p (bsi); bsi_prev (&bsi))
|
||||
{
|
||||
last = bsi_stmt (bsi);
|
||||
if (EXPR_LOCUS (last))
|
||||
break;
|
||||
}
|
||||
|
||||
/* Edge with goto locus might get wrong coverage info unless
|
||||
it is the only edge out of BB.
|
||||
Don't do that when the locuses match, so
|
||||
if (blah) goto something;
|
||||
is not computed twice. */
|
||||
if (e->goto_locus && !single_succ_p (bb)
|
||||
if (last && EXPR_LOCUS (last)
|
||||
&& e->goto_locus
|
||||
&& !single_succ_p (bb)
|
||||
#ifdef USE_MAPPED_LOCATION
|
||||
&& (LOCATION_FILE (e->goto_locus)
|
||||
!= LOCATION_FILE (EXPR_LOCATION (last))
|
||||
@ -820,8 +834,7 @@ branch_prob (void)
|
||||
!= LOCATION_LINE (EXPR_LOCATION (last)))))
|
||||
#else
|
||||
&& (e->goto_locus->file != EXPR_LOCUS (last)->file
|
||||
|| (e->goto_locus->line
|
||||
!= EXPR_LOCUS (last)->line)))
|
||||
|| (e->goto_locus->line != EXPR_LOCUS (last)->line)))
|
||||
#endif
|
||||
{
|
||||
basic_block new = split_edge (e);
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-10-24 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* gcc.dg/pr24225.c: New test.
|
||||
|
||||
2005-10-24 Asher Langton <langton2@llnl.gov>
|
||||
|
||||
* gfortran.dg/dup_save_1.f90: New test.
|
||||
|
15
gcc/testsuite/gcc.dg/pr24225.c
Normal file
15
gcc/testsuite/gcc.dg/pr24225.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* This was an ICE caused by the compiler-generated stack save/restore
|
||||
statements around s[b]. */
|
||||
/* { dg-do compile} */
|
||||
/* { dg-options "-O1 -fprofile-arcs" } */
|
||||
|
||||
int
|
||||
foo (int a, int b)
|
||||
{
|
||||
if (a)
|
||||
return 1;
|
||||
{
|
||||
int s [b];
|
||||
return 0;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user