On Thu, Feb 27, 2014 at 10:37 AM, Tobias Burnus
<[email protected]> wrote:
> 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.
Where is it "dereferenced"? void_type_node is a valid type.
>
> 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);
Instead of the goto please duplicate the pp_semicolon and return.
Ok with that change. You probably still want to add the NAMELIST_DECL
case to dump_generic_node (to avoid the << Unknown tree: ...).
Thanks,
Richard.
> }