diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cpphash.c | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 11 |
3 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57b863ae490..cce837fb81e 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 bb772eb72c9..bcb55389e3e 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 751ce82b77c..baf06e0548e 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; |