aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorSterling Augustine <saugustine@google.com>2012-06-04 17:52:42 +0000
committerSterling Augustine <sterling@gcc.gnu.org>2012-06-04 17:52:42 +0000
commit7496cd5bea9e9b4c1fd0dfef46fbea5718e7aa35 (patch)
tree9e8eb9dc8726d5a4e921753eae23e1a20d104a76 /gcc/cp
parent764ce4f20a98a9579c7c972955fd2aa1f245b455 (diff)
downloadgcc-7496cd5bea9e9b4c1fd0dfef46fbea5718e7aa35.zip
gcc-7496cd5bea9e9b4c1fd0dfef46fbea5718e7aa35.tar.gz
gcc-7496cd5bea9e9b4c1fd0dfef46fbea5718e7aa35.tar.bz2
c-pretty-print.h (pp_c_flag_gnu_v3): New enumerator.
2012-06-04 Sterling Augustine <saugustine@google.com> * 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. From-SVN: r188195
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/cp-lang.c8
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/error.c40
3 files changed, 45 insertions, 5 deletions
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index 7b1f450..da7f1e1 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -118,11 +118,11 @@ cxx_dwarf_name (tree t, int verbosity)
&& (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
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index d21c2bf..7c901be 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -5169,8 +5169,10 @@ extern const char *type_as_string (tree, int);
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);
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 6595063..67ff513 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -1028,7 +1028,12 @@ dump_decl (tree t, int flags)
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,6 +2561,21 @@ expr_as_string (tree decl, int flags)
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)
{
@@ -2573,6 +2593,21 @@ decl_as_string_translate (tree decl, int flags)
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 @@ lang_decl_name (tree decl, int v, bool translate)
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);