On Mon, Apr 21, 2014 at 12:56:57PM -0400, David Malcolm wrote: > gcc/ > * coretypes.h (gimple_eh_filter): New typedef. > (const_gimple_eh_filter): New typedef. > > * gimple.h (gimple_statement_base::as_a_gimple_eh_filter): New. > (gimple_build_eh_filter): Return a gimple_eh_filter rather than a > plain gimple. > > * gimple-pretty-print.c (dump_gimple_eh_filter): Require a > gimple_eh_filter rather than a plain gimple. > (pp_gimple_stmt_1): Add checked cast to gimple_eh_filter within > GIMPLE_EH_FILTER case of switch statement. > > * gimple.c (gimple_build_eh_filter): Return a gimple_eh_filter > rather than a plain gimple. > --- > gcc/coretypes.h | 4 ++++ > gcc/gimple-pretty-print.c | 5 +++--
same question about pretty printers. Trev > gcc/gimple.c | 5 +++-- > gcc/gimple.h | 8 +++++++- > 4 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/gcc/coretypes.h b/gcc/coretypes.h > index 1dd36fb..592b9e5 100644 > --- a/gcc/coretypes.h > +++ b/gcc/coretypes.h > @@ -117,6 +117,10 @@ struct gimple_statement_catch; > typedef struct gimple_statement_catch *gimple_catch; > typedef const struct gimple_statement_catch *const_gimple_catch; > > +struct gimple_statement_eh_filter; > +typedef struct gimple_statement_eh_filter *gimple_eh_filter; > +typedef const struct gimple_statement_eh_filter *const_gimple_eh_filter; > + > struct gimple_statement_phi; > typedef struct gimple_statement_phi *gimple_phi; > typedef const struct gimple_statement_phi *const_gimple_phi; > diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c > index ec16f13..37f28d9 100644 > --- a/gcc/gimple-pretty-print.c > +++ b/gcc/gimple-pretty-print.c > @@ -994,7 +994,8 @@ dump_gimple_catch (pretty_printer *buffer, gimple_catch > gs, int spc, int flags) > dumpfile.h). */ > > static void > -dump_gimple_eh_filter (pretty_printer *buffer, gimple gs, int spc, int flags) > +dump_gimple_eh_filter (pretty_printer *buffer, gimple_eh_filter gs, int spc, > + int flags) > { > if (flags & TDF_RAW) > dump_gimple_fmt (buffer, spc, flags, "%G <%T, %+FAILURE <%S>%->", gs, > @@ -2204,7 +2205,7 @@ pp_gimple_stmt_1 (pretty_printer *buffer, gimple gs, > int spc, int flags) > break; > > case GIMPLE_EH_FILTER: > - dump_gimple_eh_filter (buffer, gs, spc, flags); > + dump_gimple_eh_filter (buffer, gs->as_a_gimple_eh_filter (), spc, > flags); > break; > > case GIMPLE_EH_MUST_NOT_THROW: > diff --git a/gcc/gimple.c b/gcc/gimple.c > index 4bc844b..42eef46 100644 > --- a/gcc/gimple.c > +++ b/gcc/gimple.c > @@ -626,10 +626,11 @@ gimple_build_catch (tree types, gimple_seq handler) > TYPES are the filter's types. > FAILURE is the filter's failure action. */ > > -gimple > +gimple_eh_filter > gimple_build_eh_filter (tree types, gimple_seq failure) > { > - gimple p = gimple_alloc (GIMPLE_EH_FILTER, 0); > + gimple_eh_filter p = > + gimple_alloc (GIMPLE_EH_FILTER, 0)->as_a_gimple_eh_filter (); > gimple_eh_filter_set_types (p, types); > if (failure) > gimple_eh_filter_set_failure (p, failure); > diff --git a/gcc/gimple.h b/gcc/gimple.h > index e12e066..38b257c 100644 > --- a/gcc/gimple.h > +++ b/gcc/gimple.h > @@ -294,6 +294,12 @@ public: > return as_a <gimple_statement_catch> (this); > } > > + inline gimple_eh_filter > + as_a_gimple_eh_filter () > + { > + return as_a <gimple_statement_eh_filter> (this); > + } > + > inline gimple_phi > as_a_gimple_phi () > { > @@ -1512,7 +1518,7 @@ gimple_asm gimple_build_asm_vec (const char *, > vec<tree, va_gc> *, > vec<tree, va_gc> *, vec<tree, va_gc> *, > vec<tree, va_gc> *); > gimple_catch gimple_build_catch (tree, gimple_seq); > -gimple gimple_build_eh_filter (tree, gimple_seq); > +gimple_eh_filter gimple_build_eh_filter (tree, gimple_seq); > gimple gimple_build_eh_must_not_throw (tree); > gimple gimple_build_eh_else (gimple_seq, gimple_seq); > gimple_statement_try *gimple_build_try (gimple_seq, gimple_seq, > -- > 1.8.5.3 >
signature.asc
Description: Digital signature