From bbe65572cd946b16ba8c429ade291c1feb13b9f2 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Mon, 31 Jul 2000 07:11:39 -0600 Subject: [PATCH] c-decl.c (get_parm_info): Don't treat 'const void'... * 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 | 4 ++++ gcc/c-decl.c | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a26fc32986d..38d73d9ab17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2000-07-31 Joseph S. Myers + * 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. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 5f69e36136f..34a8f4207a1 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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; -- 2.30.2