Message ID | 20120601230751.E0FEB160730@sterling.mtv.corp.google.com |
---|---|
State | New |
Headers | show |
On Fri, Jun 1, 2012 at 6:07 PM, Sterling Augustine <saugustine@google.com> wrote: > After finding yet another bug in the previous patch dealing with pretty-printing > decls for dwarf in canonical form, I have figured out a way to do it that is > less invasive and much cleaner. > > This updated patch simply wraps the two entry points into the decl pretty- > printer called from cxx_dwarf_name with new functions that set the > appropriate flag on the pretty printer. This is much cleaner and avoids > the need for translating flags for C++ pretty-printing into standard C > pretty printing flags. > > OK for mainline? OK.
On Fri, Jun 1, 2012 at 4:38 PM, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote: > On Fri, Jun 1, 2012 at 6:07 PM, Sterling Augustine > <saugustine@google.com> wrote: >> After finding yet another bug in the previous patch dealing with pretty-printing >> decls for dwarf in canonical form, I have figured out a way to do it that is >> less invasive and much cleaner. >> >> This updated patch simply wraps the two entry points into the decl pretty- >> printer called from cxx_dwarf_name with new functions that set the >> appropriate flag on the pretty printer. This is much cleaner and avoids >> the need for translating flags for C++ pretty-printing into standard C >> pretty printing flags. >> >> OK for mainline? > > OK. Thanks! Committed as posted. Sterling
On Mon, Jun 4, 2012 at 7:53 PM, Sterling Augustine <saugustine@google.com> wrote: > On Fri, Jun 1, 2012 at 4:38 PM, Gabriel Dos Reis > <gdr@integrable-solutions.net> wrote: >> On Fri, Jun 1, 2012 at 6:07 PM, Sterling Augustine >> <saugustine@google.com> wrote: >>> After finding yet another bug in the previous patch dealing with pretty-printing >>> decls for dwarf in canonical form, I have figured out a way to do it that is >>> less invasive and much cleaner. >>> >>> This updated patch simply wraps the two entry points into the decl pretty- >>> printer called from cxx_dwarf_name with new functions that set the >>> appropriate flag on the pretty printer. This is much cleaner and avoids >>> the need for translating flags for C++ pretty-printing into standard C >>> pretty printing flags. >>> >>> OK for mainline? >> >> OK. > > Thanks! Committed as posted. With a wrong ChangeLog: * gcc/c-family/c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. * gcc/c-family/c-pretty-print.c (pp_c_specifier_qualifier_list): Check it at both the start and end of the function. * gcc/cp/error.c (dump_decl): Check pp_c_flag_gnu_v3. (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. (lang_decl_name): Handle namespace decls. * gcc/cp/cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. * gcc/cp/cp-lang.c: Call them. Changes for files in gcc/ go in gcc/ChangeLog. Changes for files in gcc/cp go in gcc/cp/ChangeLog. Changes for files in gcc/c-family go in gcc/c-family/ChangeLog. The path is not pre-fixed. So: c-family/ * c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. * c-pretty-print.c (pp_c_specifier_qualifier_list): Check it at both the start and end of the function. cp/ * error.c (dump_decl): Check pp_c_flag_gnu_v3. (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. (lang_decl_name): Handle namespace decls. * cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. * cp-lang.c: Call them. Can you please fix this? You don't have to post such patches for review. Ciao! Steven
On Wed, Jun 6, 2012 at 3:49 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote: > On Mon, Jun 4, 2012 at 7:53 PM, Sterling Augustine > <saugustine@google.com> wrote: >> On Fri, Jun 1, 2012 at 4:38 PM, Gabriel Dos Reis >> <gdr@integrable-solutions.net> wrote: >>> On Fri, Jun 1, 2012 at 6:07 PM, Sterling Augustine >>> <saugustine@google.com> wrote: >>>> After finding yet another bug in the previous patch dealing with pretty-printing >>>> decls for dwarf in canonical form, I have figured out a way to do it that is >>>> less invasive and much cleaner. >>>> >>>> This updated patch simply wraps the two entry points into the decl pretty- >>>> printer called from cxx_dwarf_name with new functions that set the >>>> appropriate flag on the pretty printer. This is much cleaner and avoids >>>> the need for translating flags for C++ pretty-printing into standard C >>>> pretty printing flags. >>>> >>>> OK for mainline? >>> >>> OK. >> >> Thanks! Committed as posted. > > With a wrong ChangeLog: > > * gcc/c-family/c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. > * gcc/c-family/c-pretty-print.c (pp_c_specifier_qualifier_list): Check > it at both the start and end of the function. > * gcc/cp/error.c (dump_decl): Check pp_c_flag_gnu_v3. > (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. > (lang_decl_name): Handle namespace decls. > * gcc/cp/cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. > * gcc/cp/cp-lang.c: Call them. > > Changes for files in gcc/ go in gcc/ChangeLog. > Changes for files in gcc/cp go in gcc/cp/ChangeLog. > Changes for files in gcc/c-family go in gcc/c-family/ChangeLog. > > The path is not pre-fixed. So: > > c-family/ > * c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. > * c-pretty-print.c (pp_c_specifier_qualifier_list): Check > it at both the start and end of the function. > > cp/ > * error.c (dump_decl): Check pp_c_flag_gnu_v3. > (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. > (lang_decl_name): Handle namespace decls. > * cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. > * cp-lang.c: Call them. > > Can you please fix this? > You don't have to post such patches for review. Fixes committed as you recomend. FWIW, the original entries were generated with contrib/mklog. Someone may want to fix it to do the right thing in this case.
On Wed, Jun 6, 2012 at 6:07 PM, Sterling Augustine <saugustine@google.com> wrote: > On Wed, Jun 6, 2012 at 3:49 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote: >> On Mon, Jun 4, 2012 at 7:53 PM, Sterling Augustine >> <saugustine@google.com> wrote: >>> On Fri, Jun 1, 2012 at 4:38 PM, Gabriel Dos Reis >>> <gdr@integrable-solutions.net> wrote: >>>> On Fri, Jun 1, 2012 at 6:07 PM, Sterling Augustine >>>> <saugustine@google.com> wrote: >>>>> After finding yet another bug in the previous patch dealing with pretty-printing >>>>> decls for dwarf in canonical form, I have figured out a way to do it that is >>>>> less invasive and much cleaner. >>>>> >>>>> This updated patch simply wraps the two entry points into the decl pretty- >>>>> printer called from cxx_dwarf_name with new functions that set the >>>>> appropriate flag on the pretty printer. This is much cleaner and avoids >>>>> the need for translating flags for C++ pretty-printing into standard C >>>>> pretty printing flags. >>>>> >>>>> OK for mainline? >>>> >>>> OK. >>> >>> Thanks! Committed as posted. >> >> With a wrong ChangeLog: >> >> * gcc/c-family/c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. >> * gcc/c-family/c-pretty-print.c (pp_c_specifier_qualifier_list): Check >> it at both the start and end of the function. >> * gcc/cp/error.c (dump_decl): Check pp_c_flag_gnu_v3. >> (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. >> (lang_decl_name): Handle namespace decls. >> * gcc/cp/cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. >> * gcc/cp/cp-lang.c: Call them. >> >> Changes for files in gcc/ go in gcc/ChangeLog. >> Changes for files in gcc/cp go in gcc/cp/ChangeLog. >> Changes for files in gcc/c-family go in gcc/c-family/ChangeLog. >> >> The path is not pre-fixed. So: >> >> c-family/ >> * c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator. >> * c-pretty-print.c (pp_c_specifier_qualifier_list): Check >> it at both the start and end of the function. >> >> cp/ >> * error.c (dump_decl): Check pp_c_flag_gnu_v3. >> (decl_as_dwarf_string, lang_decl_dwarf_name): New functions. >> (lang_decl_name): Handle namespace decls. >> * cp-tree.h: Declare decl_as_dwarf_string, lang_decl_dwarf_name. >> * cp-lang.c: Call them. >> >> Can you please fix this? >> You don't have to post such patches for review. > > Fixes committed as you recomend. > > FWIW, the original entries were generated with contrib/mklog. Someone > may want to fix it to do the right thing in this case. My understanding is that it was designed for branches, which has different ChangeLog entry policies. This is trunk.
Index: gcc/c-family/c-pretty-print.c =================================================================== --- gcc/c-family/c-pretty-print.c (revision 188034) +++ gcc/c-family/c-pretty-print.c (working copy) @@ -446,7 +446,7 @@ { const enum tree_code code = TREE_CODE (t); - if (TREE_CODE (t) != POINTER_TYPE) + if (!(pp->flags & pp_c_flag_gnu_v3) && code != POINTER_TYPE) pp_c_type_qualifier_list (pp, t); switch (code) { @@ -494,6 +494,8 @@ pp_simple_type_specifier (pp, t); break; } + if ((pp->flags & pp_c_flag_gnu_v3) && code != POINTER_TYPE) + pp_c_type_qualifier_list (pp, t); } /* parameter-type-list: Index: gcc/c-family/c-pretty-print.h =================================================================== --- gcc/c-family/c-pretty-print.h (revision 188034) +++ gcc/c-family/c-pretty-print.h (working copy) @@ -30,7 +30,8 @@ typedef enum { pp_c_flag_abstract = 1 << 1, - pp_c_flag_last_bit = 2 + pp_c_flag_gnu_v3 = 1 << 2, + pp_c_flag_last_bit = 3 } pp_c_pretty_print_flags; Index: gcc/cp/error.c =================================================================== --- gcc/cp/error.c (revision 188034) +++ gcc/cp/error.c (working copy) @@ -1028,7 +1028,12 @@ dump_scope (CP_DECL_CONTEXT (t), flags); flags &= ~TFF_UNQUALIFIED_NAME; if (DECL_NAME (t) == NULL_TREE) - pp_cxx_ws_string (cxx_pp, M_("{anonymous}")); + { + if (!(pp_c_base (cxx_pp)->flags & pp_c_flag_gnu_v3)) + pp_cxx_ws_string (cxx_pp, M_("{anonymous}")); + else + pp_cxx_ws_string (cxx_pp, M_("(anonymous namespace)")); + } else pp_cxx_tree_identifier (cxx_pp, DECL_NAME (t)); } @@ -2556,7 +2561,22 @@ return pp_formatted_text (cxx_pp); } +/* Wrap decl_as_string with options appropriate for dwarf. */ + const char * +decl_as_dwarf_string (tree decl, int flags) +{ + const char *name; + /* Curiously, reinit_cxx_pp doesn't reset the flags field, so setting the flag + here will be adequate to get the desired behaviour. */ + pp_c_base (cxx_pp)->flags |= pp_c_flag_gnu_v3; + name = decl_as_string (decl, flags); + /* Subsequent calls to the pretty printer shouldn't use this style. */ + pp_c_base (cxx_pp)->flags &= ~pp_c_flag_gnu_v3; + return name; +} + +const char * decl_as_string (tree decl, int flags) { reinit_cxx_pp (); @@ -2573,6 +2593,21 @@ return pp_formatted_text (cxx_pp); } +/* Wrap lang_decl_name with options appropriate for dwarf. */ + +const char * +lang_decl_dwarf_name (tree decl, int v, bool translate) +{ + const char *name; + /* Curiously, reinit_cxx_pp doesn't reset the flags field, so setting the flag + here will be adequate to get the desired behaviour. */ + pp_c_base (cxx_pp)->flags |= pp_c_flag_gnu_v3; + name = lang_decl_name (decl, v, translate); + /* Subsequent calls to the pretty printer shouldn't use this style. */ + pp_c_base (cxx_pp)->flags &= ~pp_c_flag_gnu_v3; + return name; +} + /* Generate the three forms of printable names for cxx_printable_name. */ const char * @@ -2596,6 +2631,9 @@ if (TREE_CODE (decl) == FUNCTION_DECL) dump_function_name (decl, TFF_PLAIN_IDENTIFIER); + else if ((DECL_NAME (decl) == NULL_TREE) + && TREE_CODE (decl) == NAMESPACE_DECL) + dump_decl (decl, TFF_PLAIN_IDENTIFIER); else dump_decl (DECL_NAME (decl), TFF_PLAIN_IDENTIFIER); Index: gcc/cp/cp-lang.c =================================================================== --- gcc/cp/cp-lang.c (revision 188034) +++ gcc/cp/cp-lang.c (working copy) @@ -118,11 +118,11 @@ && (ANON_AGGRNAME_P (DECL_NAME (t)) || LAMBDANAME_P (DECL_NAME (t)))) return NULL; if (verbosity >= 2) - return decl_as_string (t, - TFF_DECL_SPECIFIERS | TFF_UNQUALIFIED_NAME - | TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS); + return decl_as_dwarf_string (t, + TFF_DECL_SPECIFIERS | TFF_UNQUALIFIED_NAME + | TFF_NO_OMIT_DEFAULT_TEMPLATE_ARGUMENTS); - return cxx_printable_name (t, verbosity); + return lang_decl_dwarf_name (t, verbosity, false); } static enum classify_record Index: gcc/cp/cp-tree.h =================================================================== --- gcc/cp/cp-tree.h (revision 188034) +++ gcc/cp/cp-tree.h (working copy) @@ -5169,8 +5169,10 @@ extern const char *type_as_string_translate (tree, int); extern const char *decl_as_string (tree, int); extern const char *decl_as_string_translate (tree, int); +extern const char *decl_as_dwarf_string (tree, int); extern const char *expr_as_string (tree, int); extern const char *lang_decl_name (tree, int, bool); +extern const char *lang_decl_dwarf_name (tree, int, bool); extern const char *language_to_string (enum languages); extern const char *class_key_or_enum_as_string (tree); extern void print_instantiation_context (void);