aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@casey.cygnus.com>2000-03-07 08:34:34 +0000
committerJason Merrill <jason@gcc.gnu.org>2000-03-07 03:34:34 -0500
commit7d26bd169890754f5228df0f7f5beb104c4f0081 (patch)
treebef4420b975640f563780401dc3cc768ec639a60 /gcc
parent5816f88b4b4cc536bb23d981d55ca32e16eb3400 (diff)
downloadgcc-7d26bd169890754f5228df0f7f5beb104c4f0081.zip
gcc-7d26bd169890754f5228df0f7f5beb104c4f0081.tar.gz
gcc-7d26bd169890754f5228df0f7f5beb104c4f0081.tar.bz2
cpphash.c (collect_expansion): Also catch ## at start of macro.
* cpphash.c (collect_expansion): Also catch ## at start of macro. * varasm.c (make_decl_rtl): Don't add a number to members of local classes. (make_function_rtl): Likewise. From-SVN: r32378
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cpphash.c2
-rw-r--r--gcc/varasm.c11
3 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 57b863a..cce837f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-03-06 Jason Merrill <jason@casey.cygnus.com>
+
+ * cpphash.c (collect_expansion): Also catch ## at start of macro.
+
+ * varasm.c (make_decl_rtl): Don't add a number to members of
+ local classes.
+ (make_function_rtl): Likewise.
+
2000-03-06 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* gcse.c (compute_can_copy): Adjust if/else blocks from rth's
diff --git a/gcc/cpphash.c b/gcc/cpphash.c
index bb772eb..bcb5538 100644
--- a/gcc/cpphash.c
+++ b/gcc/cpphash.c
@@ -346,6 +346,8 @@ collect_expansion (pfile, arglist)
else if (last_token == PASTE)
/* ## ## - the second ## is ordinary. */
goto norm;
+ else if (last_token == START)
+ cpp_error (pfile, "`##' at start of macro definition");
/* Discard the token and any hspace before it. */
while (is_hspace (pfile->token_buffer[here-1]))
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 751ce82..baf06e0 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -522,8 +522,10 @@ make_function_rtl (decl)
char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
char *new_name = name;
- /* Rename a nested function to avoid conflicts. */
+ /* Rename a nested function to avoid conflicts, unless it's a member of
+ a local class, in which case the class name is already unique. */
if (decl_function_context (decl) != 0
+ && ! TYPE_P (DECL_CONTEXT (decl))
&& DECL_INITIAL (decl) != 0
&& DECL_RTL (decl) == 0)
{
@@ -765,9 +767,12 @@ make_decl_rtl (decl, asmspec, top_level)
if (DECL_RTL (decl) == 0)
{
/* Can't use just the variable's own name for a variable
- whose scope is less than the whole file.
+ whose scope is less than the whole file, unless it's a member
+ of a local class (which will already be unambiguous).
Concatenate a distinguishing number. */
- if (!top_level && !TREE_PUBLIC (decl) && asmspec == 0)
+ if (!top_level && !TREE_PUBLIC (decl)
+ && ! TYPE_P (DECL_CONTEXT (decl))
+ && asmspec == 0)
{
char *label;