Hi Richard, hi all, I wrote: > @@ -1713,21 +1733,24 @@ dump_generic_node (pretty_printer *buffer, tree node, > int spc, int flags, > case BIND_EXPR: ... > for (op0 = BIND_EXPR_VARS (node); op0; op0 = DECL_CHAIN (op0)) > { >- print_declaration (buffer, op0, spc+2, flags); >+ if (TREE_CODE(op0) == NAMELIST_DECL) ...
Richard Biener wrote: > Works for me, but doesn't the simpler > --- tree-pretty-print.c (revision 208066) > +++ tree-pretty-print.c (working copy) > @@ -1390,6 +1390,7 @@ > case FIELD_DECL: > case DEBUG_EXPR_DECL: > case NAMESPACE_DECL: >+ case NAMELIST_DECL: > dump_decl_name (buffer, node, flags); > break; > > also work? It's odd that we need to do sth special just for namelist-decls. It won't do - at least not like that. NAMELIST_DECL are stored in BIND_EXPR, hence, one ends up in the code I quote above. That code calls print_declaration() NAMELIST_DECL are created as decl = make_node (NAMELIST_DECL); TREE_TYPE (decl) = void_type_node; NAMELIST_DECL_ASSOCIATED_DECL (decl) = build_constructor (NULL_TREE, nml_decls); Hence, TREE_TYPE() is void_type_node and dereferencing that one leads to an ICE. However, the following should work - do you like it more? Tobias --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -2686,6 +2686,13 @@ print_declaration (pretty_printer *buffer, tree t, int spc, int flags) { INDENT (spc); + if (TREE_CODE(t) == NAMELIST_DECL) + { + pp_string(buffer, "namelist "); + dump_decl_name (buffer, t, flags); + goto done; + } + if (TREE_CODE (t) == TYPE_DECL) pp_string (buffer, "typedef "); @@ -2767,6 +2774,7 @@ print_declaration (pretty_printer *buffer, tree t, int spc, int flags) pp_right_bracket (buffer); } +done: pp_semicolon (buffer); }