c-decl.c (get_parm_info): Don't treat 'const void'...
authorJoseph Myers <jsm28@cam.ac.uk>
Mon, 31 Jul 2000 13:11:39 +0000 (07:11 -0600)
committerJeff Law <law@gcc.gnu.org>
Mon, 31 Jul 2000 13:11:39 +0000 (07:11 -0600)
* c-decl.c (get_parm_info): Don't treat 'const void', 'volatile
void' or 'register void' as being the special case of 'void' alone
in a parameter list.

From-SVN: r35377

gcc/ChangeLog
gcc/c-decl.c

index a26fc32986d34c809b7d8ec1b1f58763553132b8..38d73d9ab17585af20121bb4463643622db570d2 100644 (file)
@@ -1,5 +1,9 @@
 2000-07-31  Joseph S. Myers  <jsm28@cam.ac.uk>
 
+       * c-decl.c (get_parm_info): Don't treat 'const void', 'volatile
+       void' or 'register void' as being the special case of 'void' alone
+       in a parameter list.
+
        * c-typeck.c (build_c_cast): Change -Wcast-qual pedwarn for
        discarding qualifiers into a plain warning.
 
index 5f69e36136f72d55fcb4cfb6b91cef4352964197..34a8f4207a106da777d170f1492753cc3f811f81 100644 (file)
@@ -4985,10 +4985,18 @@ get_parm_info (void_at_end)
   tree new_parms = 0;
   tree order = current_binding_level->parm_order;
 
-  /* Just `void' (and no ellipsis) is special.  There are really no parms.  */
+  /* Just `void' (and no ellipsis) is special.  There are really no parms.
+     But if the `void' is qualified (by `const' or `volatile') or has a
+     storage class specifier (`register'), then the behavior is undefined;
+     by not counting it as the special case of `void' we will cause an
+     error later.  Typedefs for `void' are OK (see DR#157).
+  */
   if (void_at_end && parms != 0
       && TREE_CHAIN (parms) == 0
       && VOID_TYPE_P (TREE_TYPE (parms))
+      && ! TREE_THIS_VOLATILE (parms)
+      && ! TREE_READONLY (parms)
+      && ! DECL_REGISTER (parms)
       && DECL_NAME (parms) == 0)
     {
       parms = NULL_TREE;