On Sat, 16 Feb 2013, Dodji Seketeli wrote:

> Jakub Jelinek <ja...@redhat.com> writes:
> 
> > On Sat, Feb 16, 2013 at 10:40:43AM +0100, Dodji Seketeli wrote:
> >> --- a/gcc/cfg.c
> >> +++ b/gcc/cfg.c
> >> @@ -663,6 +663,21 @@ debug_bb_n (int n)
> >>    return bb;
> >>  }
> >>  
> >> +/* Dumps cfg related information about basic blocks, from number 'S'
> >> +   to number E, to stderr.  */
> >> +
> >> +DEBUG_FUNCTION basic_block
> >> +debug_bb_range (int s, int e)
> >> +{
> >> +  basic_block bb =  NULL;
> >> +  for (int i = s; i <= e; ++i)
> >> +    {
> >> +      bb = BASIC_BLOCK (i);
> >> +      debug_bb (bb);
> >
> > At some points after cfg changes, but before cfg cleanup there might be
> > gaps, so I think you want if (bb) debug_bb (bb);, otherwise it could crash
> > in that case.
> 
> Right.  I have updated the patch below for that and also to ensure that
> we don't try to access a basic block with number >= last_basic_block.

Can you try adding a gdb python thingie instead?  Just for my
own education?

;)

Thanks,
Richard.

> Thanks.
> 
> gcc/
> 
>       * basic-block.h (debug_bb_range): Declare ...
>       * cfg.c (debug_bb_range): ... new function.
> ---
>  gcc/basic-block.h |  1 +
>  gcc/cfg.c         | 16 ++++++++++++++++
>  2 files changed, 17 insertions(+)
> 
> diff --git a/gcc/basic-block.h b/gcc/basic-block.h
> index 90eb57b..8407c4a 100644
> --- a/gcc/basic-block.h
> +++ b/gcc/basic-block.h
> @@ -752,6 +752,7 @@ extern bool predictable_edge_p (edge);
>  extern void init_flow (struct function *);
>  extern void debug_bb (basic_block);
>  extern basic_block debug_bb_n (int);
> +extern basic_block debug_bb_range (int, int);
>  extern void dump_flow_info (FILE *, int);
>  extern void expunge_block (basic_block);
>  extern void link_block (basic_block, basic_block);
> diff --git a/gcc/cfg.c b/gcc/cfg.c
> index 9e4380c..d72e075 100644
> --- a/gcc/cfg.c
> +++ b/gcc/cfg.c
> @@ -663,6 +663,22 @@ debug_bb_n (int n)
>    return bb;
>  }
>  
> +/* Dumps cfg related information about basic blocks, from number 'S'
> +   to number E, to stderr.  */
> +
> +DEBUG_FUNCTION basic_block
> +debug_bb_range (int s, int e)
> +{
> +  basic_block bb =  NULL;
> +  for (int i = s; i <= e && i < last_basic_block; ++i)
> +    {
> +      bb = BASIC_BLOCK (i);
> +      if (bb)
> +     debug_bb (bb);
> +    }
> +  return bb;
> +}
> +
>  /* Dumps cfg related information about basic block BB to OUTF.
>     If HEADER is true, dump things that appear before the instructions
>     contained in BB.  If FOOTER is true, dump things that appear after.
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend

Reply via email to