https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68117

--- Comment #28 from Joost VandeVondele <Joost.VandeVondele at mat dot ethz.ch> 
---
(In reply to Richard Biener from comment #27)
> Sth like
> 
> Index: gcc/tree-ssa.c
> ===================================================================
> --- gcc/tree-ssa.c      (revision 230404)
> +++ gcc/tree-ssa.c      (working copy)
> @@ -125,6 +125,14 @@ redirect_edge_var_map_destroy (void)
>    edge_var_maps = NULL;
>  }
>  
> +/* Verify the edge_var_map is empty.  */
> +
> +void
> +check_redirect_edge_var_map_empty (void)
> +{
> +  gcc_assert (!edge_var_maps || edge_var_maps->elements () == 0);
> +}
> +
>  
>  /* Remove the corresponding arguments from the PHI nodes in E's
>     destination block and redirect it to DEST.  Return redirected edge.
> Index: gcc/tree-ssa.h
> ===================================================================
> --- gcc/tree-ssa.h      (revision 230404)
> +++ gcc/tree-ssa.h      (working copy)
> @@ -36,6 +36,7 @@ extern void redirect_edge_var_map_clear
>  extern void redirect_edge_var_map_dup (edge, edge);
>  extern vec<edge_var_map> *redirect_edge_var_map_vector (edge);
>  extern void redirect_edge_var_map_destroy (void);
> +extern void check_redirect_edge_var_map_empty (void);
>  extern edge ssa_redirect_edge (edge, basic_block);
>  extern void flush_pending_stmts (edge);
>  extern void gimple_replace_ssa_lhs (gimple *, tree);
> Index: gcc/passes.c
> ===================================================================
> --- gcc/passes.c        (revision 230404)
> +++ gcc/passes.c        (working copy)
> @@ -2211,7 +2214,10 @@ execute_one_ipa_transform_pass (struct c
>  
>    /* Signal this is a suitable GC collection point.  */
>    if (!(todo_after & TODO_do_not_ggc_collect))
> -    ggc_collect ();
> +    {
> +      check_redirect_edge_var_map_empty ();
> +      ggc_collect ();
> +    }
>  }
>  
>  /* For the current function, execute all ipa transforms. */
> @@ -2380,7 +2386,10 @@ execute_one_pass (opt_pass *pass)
>  
>    /* Signal this is a suitable GC collection point.  */
>    if (!((todo_after | pass->todo_flags_finish) & TODO_do_not_ggc_collect))
> -    ggc_collect ();
> +    {
> +      check_redirect_edge_var_map_empty ();
> +      ggc_collect ();
> +    }
>  
>    return true;
>  }
> 
> after all edge_var_maps is _not_ GTY marked.

triggers plenty of ICEs in my case:
/data/vjoost/clean/cp2k/cp2k/src/grid/fast.F:59:0:

 END SUBROUTINE rankup


internal compiler error: in check_redirect_edge_var_map_empty, at
tree-ssa.c:133

Reply via email to