From beac9b932c42ba0e22d92b92ccb26117354aa564 Mon Sep 17 00:00:00 2001 From: Alex Samuel Date: Tue, 21 Nov 2000 04:38:08 +0000 Subject: [PATCH] mangle.c (write_name): Use for names directly in function scope. * mangle.c (write_name): Use for names directly in function scope. (write_unscoped_name): Accept names directly in function scope. From-SVN: r37603 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/mangle.c | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3e6af41fbc52..c75edb942ccb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2000-11-16 Alex Samuel + + * mangle.c (write_name): Use for names directly in + function scope. + (write_unscoped_name): Accept names directly in function scope. + 2000-11-20 Nathan Sidwell * lex.c (rid_to_yy, RID_EXPORT): Make unique keyword. diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 7353cf881ad2..d4ffaff26c57 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -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 or , the + latter with a special substitution. Also, a name that is + directly in a local function scope is also mangled with + rather than a full . */ 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);