tree.h (merge_dllimport_decl_attributes, [...]): Remove conditional exposure of proto...
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 17 Jun 2015 15:36:02 +0000 (15:36 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Wed, 17 Jun 2015 15:36:02 +0000 (15:36 +0000)
* 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

12 files changed:
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-lang.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/error.c
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/lto-streamer-out.c
gcc/tree-streamer-out.c
gcc/tree.c
gcc/tree.h

index 58a0a2bd717398679ecfe4d96328a7a7399b3395..155a985e7b0ea4a4be4b4683d3b5504f8360da53 100644 (file)
@@ -1,3 +1,14 @@
+2015-06-17  Andrew MacLeod  <amacleod@redhat.com>
+
+       * 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.
+
 2015-06-17  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.md (*cmp<mode>_internal1): Rename to...
index cfa392b1a5c1cdfafe337c2699beaa663fc80984..98dab4a47b9333a1f05ce9d7a392f4c01519f300 100644 (file)
@@ -1,3 +1,13 @@
+2015-06-17  Andrew MacLeod  <amacleod@redhat.com>
+
+       * cp-lang.c (cxx_dwarf_name): Use anon_aggrname_p.
+       * cp-tree.h (TYPE_ANONYMOUS_P): Likewise.
+       * decl.c (grokdeclarator, xref_tag_1): Likewise.
+       * error.c (dump_aggr_type): likewise.
+       * pt.c (push_template_decl_real): Likewise.
+       * name-lookup.c (make_anon_name): Use anon_aggrname_format.
+
+
 2015-06-17  Andrew MacLeod  <amacleod@redhat.com>
 
        * call.c: Do not include input.h, line-map.h or is-a.h.
index 3645a06c9b54bec339d1f2097f5a97bc2c0ffc60..0818be4bd4c920af07748894c006c1762ef0637f 100644 (file)
@@ -119,7 +119,7 @@ cxx_dwarf_name (tree t, int verbosity)
   gcc_assert (DECL_P (t));
 
   if (DECL_NAME (t)
-      && (ANON_AGGRNAME_P (DECL_NAME (t)) || LAMBDA_TYPE_P (t)))
+      && (anon_aggrname_p (DECL_NAME (t)) || LAMBDA_TYPE_P (t)))
     return NULL;
   if (verbosity >= 2)
     return decl_as_dwarf_string (t,
index 37128be1600d0c596226cf87c8df6b97fd03dd46..b53aa9028e23f9e107f2de86264b05bf566815ec 100644 (file)
@@ -1335,7 +1335,7 @@ enum languages { lang_c, lang_cplusplus, lang_java };
 
 /* Nonzero if NODE has no name for linkage purposes.  */
 #define TYPE_ANONYMOUS_P(NODE) \
-  (OVERLOAD_TYPE_P (NODE) && ANON_AGGRNAME_P (TYPE_LINKAGE_IDENTIFIER (NODE)))
+  (OVERLOAD_TYPE_P (NODE) && anon_aggrname_p (TYPE_LINKAGE_IDENTIFIER (NODE)))
 
 /* The _DECL for this _TYPE.  */
 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
index 3cb9ca1992262fb934c04a69569e3e122386b1cf..c102a4ee7171a74f292ae84ba899ec331c660393 100644 (file)
@@ -10389,7 +10389,7 @@ grokdeclarator (const cp_declarator *declarator,
          /* Replace the anonymous name with the real name everywhere.  */
          for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
            {
-             if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
+             if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
                /* We do not rename the debug info representing the
                   anonymous tagged type because the standard says in
                   [dcl.typedef] that the naming applies only for
@@ -12290,7 +12290,7 @@ xref_tag_1 (enum tag_types tag_code, tree name,
 
   /* In case of anonymous name, xref_tag is only called to
      make type node and push name.  Name lookup is not required.  */
-  if (ANON_AGGRNAME_P (name))
+  if (anon_aggrname_p (name))
     t = NULL_TREE;
   else
     t = lookup_and_check_tag  (tag_code, name,
index bb5106cacb6621b2d69d29f31d26b4cd23038fc5..96fa94d50e0c3fe99719911a5ae9ec7a6f6f7aca 100644 (file)
@@ -677,7 +677,7 @@ dump_aggr_type (cxx_pretty_printer *pp, tree t, int flags)
       name = DECL_NAME (name);
     }
 
-  if (name == 0 || ANON_AGGRNAME_P (name))
+  if (name == 0 || anon_aggrname_p (name))
     {
       if (flags & TFF_CLASS_KEY_OR_ENUM)
        pp_string (pp, M_("<anonymous>"));
index cc116988637c2ba17e6d8c2fb019819e80f56ca7..1d7afea2acaaad2fdd60fe9fa91edc8ca2eed304 100644 (file)
@@ -2096,7 +2096,7 @@ make_anon_name (void)
 {
   char buf[32];
 
-  sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
+  sprintf (buf, anon_aggrname_format (), anon_cnt++);
   return get_identifier (buf);
 }
 
index 6a73a2eef369b484b070f5541a70f1a19c72caea..60b94981b0ad03e75e072f8803ad16066dcd1919 100644 (file)
@@ -4794,7 +4794,7 @@ push_template_decl_real (tree decl, bool is_friend)
       if (DECL_CLASS_SCOPE_P (decl))
        member_template_p = true;
       if (TREE_CODE (decl) == TYPE_DECL
-         && ANON_AGGRNAME_P (DECL_NAME (decl)))
+         && anon_aggrname_p (DECL_NAME (decl)))
        {
          error ("template class without a name");
          return error_mark_node;
index 88c2e80dfcc18d4ebe44ed627bdf6bf953d95cf4..4671702d24941766827c32aa993268fecbcfc09c 100644 (file)
@@ -738,7 +738,7 @@ DFS::DFS_write_tree_body (struct output_block *ob,
       /* Drop names that were created for anonymous entities.  */
       if (DECL_NAME (expr)
          && TREE_CODE (DECL_NAME (expr)) == IDENTIFIER_NODE
-         && ANON_AGGRNAME_P (DECL_NAME (expr)))
+         && anon_aggrname_p (DECL_NAME (expr)))
        ;
       else
        DFS_follow_tree_edge (DECL_NAME (expr));
@@ -1179,7 +1179,7 @@ hash_tree (struct streamer_tree_cache_d *cache, hash_map<tree, hashval_t> *map,
       /* Drop names that were created for anonymous entities.  */
       if (DECL_NAME (t)
          && TREE_CODE (DECL_NAME (t)) == IDENTIFIER_NODE
-         && ANON_AGGRNAME_P (DECL_NAME (t)))
+         && anon_aggrname_p (DECL_NAME (t)))
        ;
       else
        visit (DECL_NAME (t));
index 84ebb64977419c3bc6dbf6db5f24acb76d74e4e4..10cbd561987c8f70b0219e8d59b8694f4e02c024 100644 (file)
@@ -601,7 +601,7 @@ write_ts_decl_minimal_tree_pointers (struct output_block *ob, tree expr,
   /* Drop names that were created for anonymous entities.  */
   if (DECL_NAME (expr)
       && TREE_CODE (DECL_NAME (expr)) == IDENTIFIER_NODE
-      && ANON_AGGRNAME_P (DECL_NAME (expr)))
+      && anon_aggrname_p (DECL_NAME (expr)))
     stream_write_tree (ob, NULL_TREE, ref_p);
   else
     stream_write_tree (ob, DECL_NAME (expr), ref_p);
index feeba1612b6741f608f94d3e35fcfdd40ad65310..419e2767d9be3a13205b2a740ce4b3824f17b0b0 100644 (file)
@@ -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
index ca5e68100dad886469fc53a62cdf788cab255822..dedcb370ea679a41eadcc6a108bafa75675ae444 100644 (file)
@@ -3988,14 +3988,12 @@ extern tree remove_attribute (const char *, tree);
 
 extern tree merge_attributes (tree, tree);
 
-#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
 /* Given two Windows decl attributes lists, possibly including
    dllimport, return a list of their union .  */
 extern tree merge_dllimport_decl_attributes (tree, tree);
 
 /* Handle a "dllimport" or "dllexport" attribute.  */
 extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
-#endif
 
 /* Returns true iff unqualified CAND and BASE are equivalent.  */
 
@@ -4899,23 +4897,8 @@ target_opts_for_fn (const_tree fndecl)
 /* 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.  */
-#ifndef NO_DOT_IN_LABEL
-#define ANON_AGGRNAME_FORMAT "._%d"
-#define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == '.' \
-                                 && IDENTIFIER_POINTER (ID_NODE)[1] == '_')
-#else /* NO_DOT_IN_LABEL */
-#ifndef NO_DOLLAR_IN_LABEL
-#define ANON_AGGRNAME_FORMAT "$_%d"
-#define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == '$' \
-                                 && IDENTIFIER_POINTER (ID_NODE)[1] == '_')
-#else /* NO_DOLLAR_IN_LABEL */
-#define ANON_AGGRNAME_PREFIX "__anon_"
-#define ANON_AGGRNAME_P(ID_NODE) \
-  (!strncmp (IDENTIFIER_POINTER (ID_NODE), ANON_AGGRNAME_PREFIX, \
-            sizeof (ANON_AGGRNAME_PREFIX) - 1))
-#define ANON_AGGRNAME_FORMAT "__anon_%d"
-#endif /* NO_DOLLAR_IN_LABEL */
-#endif /* NO_DOT_IN_LABEL */
+extern const char *anon_aggrname_format();
+extern bool anon_aggrname_p (const_tree);
 
 /* The tree and const_tree overload templates.   */
 namespace wi