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
