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