This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++ PATCH] set_global_binding tweak


It turns out that we no longer have to worry about the stat hack when pushing internal decls into the global namespace. I think it was last week's change to record_builtin_type, which did have the habit of pushing duplicates before that.

Applying to trunk.

nathan
--
Nathan Sidwell
2017-10-10  Nathan Sidwell  <nathan@acm.org>

	* name-lookup.c (set_global_binding): Don't deal with STAT_HACK.

Index: name-lookup.c
===================================================================
--- name-lookup.c	(revision 253502)
+++ name-lookup.c	(working copy)
@@ -4858,22 +4858,13 @@ set_global_binding (tree decl)
   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
 
   tree *slot = find_namespace_slot (global_namespace, DECL_NAME (decl), true);
-  tree old = MAYBE_STAT_DECL (*slot);
 
-  if (!old)
-    *slot = decl;
-  else if (old == decl)
-    ;
-  else if (!STAT_HACK_P (*slot)
-	   && TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
-    *slot = stat_hack (old, decl);
-  else if (!STAT_HACK_P (*slot)
-	   && TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
-    *slot = stat_hack (decl, old);
-  else
-    /* The user's placed something in the implementor's
-       namespace.  */
-    diagnose_name_conflict (decl, old);
+  if (*slot)
+    /* The user's placed something in the implementor's namespace.  */
+    diagnose_name_conflict (decl, MAYBE_STAT_DECL (*slot));
+
+  /* Force the binding, so compiler internals continue to work.  */
+  *slot = decl;
 
   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]