From 7d26bd169890754f5228df0f7f5beb104c4f0081 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 7 Mar 2000 08:34:34 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/cpphash.c | 2 ++ gcc/varasm.c | 11 ++++++++--- 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 + + * 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 * 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; -- 2.7.4