]> gcc.gnu.org Git - gcc.git/commitdiff
cpphash.c (collect_expansion): Also catch ## at start of macro.
authorJason Merrill <jason@casey.cygnus.com>
Tue, 7 Mar 2000 08:34:34 +0000 (08:34 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 7 Mar 2000 08:34:34 +0000 (03:34 -0500)
        * 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
gcc/cpphash.c
gcc/varasm.c

index 57b863ae49010977008b0584cae679b8a67d1b24..cce837fb81ef281cc741d8f16bc2cd9c2061b291 100644 (file)
@@ -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
index bb772eb72c9777f0f8f729c1d014af0c907a57f1..bcb55389e3e610bffee3595be5c4183814028309 100644 (file)
@@ -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]))
index 751ce82b77c37afd948ac9972c8e54952140a9e9..baf06e0548e431c0cb796bddb59ac20e827c9322 100644 (file)
@@ -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;
 
This page took 0.078566 seconds and 5 git commands to generate.