aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2015-06-17 15:36:02 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2015-06-17 15:36:02 +0000
commitee47f74ef0e961a0168e830919606981ef331c52 (patch)
tree573d8e14e3900a28a20976ad8875fbc8ae34ac5f /gcc/tree.c
parent82ba6a8e7e8be8714e0976805cf1423b5c885504 (diff)
downloadgcc-ee47f74ef0e961a0168e830919606981ef331c52.zip
gcc-ee47f74ef0e961a0168e830919606981ef331c52.tar.gz
gcc-ee47f74ef0e961a0168e830919606981ef331c52.tar.bz2
tree.h (merge_dllimport_decl_attributes, [...]): Remove conditional exposure of prototypes.
* tree.h (merge_dllimport_decl_attributes, handle_dll_attribute): Remove conditional exposure of prototypes. (ANON_AGGRNAME_FORMAT, ANON_AGGRNAME_P): Delete. * tree.c (anon_aggrname_format, anon_aggrname_p): New. Replace macro definitions in tree.h with functions. * lto-streamer-out.c (DFS_write_tree_body, hash_tree): Use anon_aggrname_p. * tree-streamer-out.c (write_ts_decl_minimal_tree_pointers): Likewise. * cp/cp-lang.c (cxx_dwarf_name): Use anon_aggrname_p. * cp/cp-tree.h (TYPE_ANONYMOUS_P): Likewise. * cp/decl.c (grokdeclarator, xref_tag_1): Likewise. * cp/error.c (dump_aggr_type): likewise. * cp/pt.c (push_template_decl_real): Likewise. * cp/name-lookup.c (make_anon_name): Use anon_aggrname_format. From-SVN: r224564
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index feeba16..419e276 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -9256,6 +9256,42 @@ clean_symbol_name (char *p)
*p = '_';
}
+/* For anonymous aggregate types, we need some sort of name to
+ hold on to. In practice, this should not appear, but it should
+ not be harmful if it does. */
+bool
+anon_aggrname_p(const_tree id_node)
+{
+#ifndef NO_DOT_IN_LABEL
+ return (IDENTIFIER_POINTER (id_node)[0] == '.'
+ && IDENTIFIER_POINTER (id_node)[1] == '_');
+#else /* NO_DOT_IN_LABEL */
+#ifndef NO_DOLLAR_IN_LABEL
+ return (IDENTIFIER_POINTER (id_node)[0] == '$' \
+ && IDENTIFIER_POINTER (id_node)[1] == '_');
+#else /* NO_DOLLAR_IN_LABEL */
+#define ANON_AGGRNAME_PREFIX "__anon_"
+ return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX,
+ sizeof (ANON_AGGRNAME_PREFIX) - 1));
+#endif /* NO_DOLLAR_IN_LABEL */
+#endif /* NO_DOT_IN_LABEL */
+}
+
+/* Return a format for an anonymous aggregate name. */
+const char *
+anon_aggrname_format()
+{
+#ifndef NO_DOT_IN_LABEL
+ return "._%d";
+#else /* NO_DOT_IN_LABEL */
+#ifndef NO_DOLLAR_IN_LABEL
+ return "$_%d";
+#else /* NO_DOLLAR_IN_LABEL */
+ return "__anon_%d";
+#endif /* NO_DOLLAR_IN_LABEL */
+#endif /* NO_DOT_IN_LABEL */
+}
+
/* Generate a name for a special-purpose function.
The generated name may need to be unique across the whole link.
Changes to this function may also require corresponding changes to