]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
mangle.c (write_name): Use <unscoped-name> for names directly in function scope.
authorAlex Samuel <samuel@codesourcery.com>
Tue, 21 Nov 2000 04:38:08 +0000 (04:38 +0000)
committerAlex Samuel <samuel@gcc.gnu.org>
Tue, 21 Nov 2000 04:38:08 +0000 (04:38 +0000)
* mangle.c (write_name): Use <unscoped-name> for names directly in
function scope.
(write_unscoped_name): Accept names directly in function scope.

From-SVN: r37603

gcc/cp/ChangeLog
gcc/cp/mangle.c

index 3e6af41fbc5246b905f2ca1f214fc4e9a22d974e..c75edb942ccbf501fb55d4b1cd04e7f2089f3bfc 100644 (file)
@@ -1,3 +1,9 @@
+2000-11-16  Alex Samuel  <samuel@codesourcery.com>
+
+       * mangle.c (write_name): Use <unscoped-name> for names directly in
+       function scope.
+       (write_unscoped_name): Accept names directly in function scope.
+       
 2000-11-20  Nathan Sidwell  <nathan@codesourcery.com>
 
        * lex.c (rid_to_yy, RID_EXPORT): Make unique keyword.
index 7353cf881ad2f32ca0b1ab18e79143a9d961c14d..d4ffaff26c5782e1e88cfea0e2ab206251521e5d 100644 (file)
@@ -674,10 +674,15 @@ write_name (decl, ignore_local_scope)
   else
     context = (DECL_CONTEXT (decl) == NULL) ? NULL : CP_DECL_CONTEXT (decl);
 
-  /* Decls in :: or ::std scope are treated specially.  */
+  /* A decl in :: or ::std scope is treated specially.  The former is
+     mangled using <unscoped-name> or <unscoped-template-name>, the
+     latter with a special substitution.  Also, a name that is
+     directly in a local function scope is also mangled with
+     <unscoped-name> rather than a full <nested-name>.  */
   if (context == NULL 
       || context == global_namespace 
-      || DECL_NAMESPACE_STD_P (context))
+      || DECL_NAMESPACE_STD_P (context)
+      || (ignore_local_scope && TREE_CODE (context) == FUNCTION_DECL))
     {
       tree template_info;
       /* Is this a template instance?  */
@@ -748,8 +753,11 @@ write_unscoped_name (decl)
       write_string ("St");
       write_unqualified_name (decl);
     }
-  /* If not, it should be in the global namespace.  */
-  else if (context == global_namespace || context == NULL)
+  /* If not, it should be either in the global namespace, or directly
+     in a local function scope.  */
+  else if (context == global_namespace 
+          || context == NULL
+          || TREE_CODE (context) == FUNCTION_DECL)
     write_unqualified_name (decl);
   else 
     my_friendly_abort (20000521);