decl.c (grokparms): Unobfuscate and get correct diagnostic for parameters with pointe...
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 11 Jan 2001 11:37:15 +0000 (11:37 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 11 Jan 2001 11:37:15 +0000 (11:37 +0000)
cp:
* decl.c (grokparms): Unobfuscate and get correct diagnostic for
parameters with pointers to arrays of unknown bound.

From-SVN: r38901

gcc/cp/ChangeLog
gcc/cp/decl.c

index 31d2d1229a17a94dd0cea8385956509f3b17fed3..526424fd77a60ae82be8dba276e7acf573281055 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-11  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * decl.c (grokparms): Unobfuscate and get correct diagnostic for
+       parameters with pointers to arrays of unknown bound.
+
 2001-01-11  Nathan Sidwell  <nathan@codesourcery.com>
 
        * parse.y (template_parm_header, template_spec_header): New
index dfe69acb6a3509c2fb3092f54dc4646a878cb31f..66a285c670951272b306387acda3d8dff8b12d5e 100644 (file)
@@ -11907,15 +11907,22 @@ grokparms (first_parm)
            {
              /* [dcl.fct]/6, parameter types cannot contain pointers
                 (references) to arrays of unknown bound.  */
-             tree t = type;
-
-             while (POINTER_TYPE_P (t)
-                    || (TREE_CODE (t) == ARRAY_TYPE
-                        && TYPE_DOMAIN (t) != NULL_TREE))
-               t = TREE_TYPE (t);
+             tree t = TREE_TYPE (type);
+             int ptr = TYPE_PTR_P (type);
+
+              while (1)
+                {
+                  if (TYPE_PTR_P (t))
+                    ptr = 1;
+                  else if (TREE_CODE (t) != ARRAY_TYPE)
+                    break;
+                  else if (!TYPE_DOMAIN (t))
+                   break;
+                 t = TREE_TYPE (t);
+               }
              if (TREE_CODE (t) == ARRAY_TYPE)
                cp_error ("parameter `%D' includes %s to array of unknown bound `%T'",
-                         decl, TYPE_PTR_P (type) ? "pointer" : "reference", t);
+                         decl, ptr ? "pointer" : "reference", t);
            }
 
          DECL_ARG_TYPE (decl) = TREE_TYPE (decl);