Re: optimization/10862: [tree-ssa] Segfault for (essentially) empty function

Diego Novillo <[email protected]>
Newsgroups gmane.comp.gcc.prs
Message-ID <[email protected]>
The following reply was made to PR optimization/10862; it has been noted by GNATS.

From: Diego Novillo <[email protected]>
To: [email protected]
Cc: [email protected]
Subject: Re: optimization/10862: [tree-ssa] Segfault for (essentially) empty function
Date: Mon, 19 May 2003 11:14:47 -0400

 On Mon, May 19, 2003 at 02:43:41PM -0000, [email protected] wrote:
 > 
 > >Number:         10862
 > >Category:       optimization
 > >Synopsis:       [tree-ssa] Segfault for (essentially) empty function
 > >Confidential:   no
 > >Severity:       serious
 > >Priority:       medium
 > >Responsible:    unassigned
 > >State:          open
 > >Class:          sw-bug
 > >Submitter-Id:   net
 > >Arrival-Date:   Mon May 19 14:46:01 UTC 2003
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     Wolfgang Bangerth
 > >Release:        unknown-1.0
 > >Organization:
 > >Environment:
 > 
 > >Description:
 > This one's rather funny (and was much simpler to reduce).
 > We ICE on a function that's essentially empty:
 > ---------------------------------------template <int N> void foo () {
 >   int i;
 >   switch (i) {
 >     case 1:
 >           switch (N) {}
 >     default: ;
 >   }
 > }
 > 
 > template void foo<1> ();
 > ---------------------------
 > 
 When removing blocks with empty conditionals, we should not
 assume that the block has a post dominator.  I'm testing this
 patch.
 
 
 Diego.
 
 
 
 	* tree-ssa-dce.c (remove_conditional): Don't assume that the block
 	to remove has a post-dominator.
 
 Index: tree-ssa-dce.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa-dce.c,v
 retrieving revision 1.1.2.37
 diff -d -u -p -r1.1.2.37 tree-ssa-dce.c
 --- tree-ssa-dce.c	16 May 2003 18:09:19 -0000	1.1.2.37
 +++ tree-ssa-dce.c	19 May 2003 15:11:18 -0000
 @@ -633,15 +633,16 @@ remove_conditional (basic_block bb)
       in DCE.  */
  
  #ifdef ENABLE_CHECKING
 -  {
 -    tree phi;
 -    for (phi = phi_nodes (pdom_bb); phi; phi = TREE_CHAIN (phi))
 -      if (necessary_p (phi))
 -        abort ();
 -  }
 +  if (pdom_bb)
 +    {
 +      tree phi;
 +      for (phi = phi_nodes (pdom_bb); phi; phi = TREE_CHAIN (phi))
 +	if (necessary_p (phi))
 +	  abort ();
 +    }
  #endif
  
    /* Add an edge to BB's post dominator.  */
    if (bb->succ == NULL)
 -    make_edge (bb, pdom_bb,  EDGE_FALLTHRU);
 +    make_edge (bb, pdom_bb ? pdom_bb : EXIT_BLOCK_PTR,  EDGE_FALLTHRU);
  }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.