re PR c/14517 (change in behaviour wrt duplicate qualifiers)
PR c/14517 * c-decl.c (grokdeclarator): Don't warn for duplicate qualifiers except for pedantic c90 mode. From-SVN: r79286
This commit is contained in:
parent
8ab705be38
commit
28fca7e467
5 changed files with 61 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-03-10 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR c/14517
|
||||
* c-decl.c (grokdeclarator): Don't warn for duplicate qualifiers
|
||||
except for pedantic c90 mode.
|
||||
|
||||
2004-03-10 Kelley Cook <kcook@gcc.gnu.org>
|
||||
|
||||
* configure.ac: Bump AC_PREREQ to 2.59.
|
||||
|
|
32
gcc/c-decl.c
32
gcc/c-decl.c
|
@ -3372,7 +3372,7 @@ grokdeclarator (tree declarator, tree declspecs,
|
|||
{
|
||||
if (i == RID_CONST || i == RID_VOLATILE || i == RID_RESTRICT)
|
||||
{
|
||||
if (!flag_isoc99)
|
||||
if (pedantic && !flag_isoc99)
|
||||
pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
|
||||
}
|
||||
else
|
||||
|
@ -3629,12 +3629,15 @@ grokdeclarator (tree declarator, tree declspecs,
|
|||
volatilep
|
||||
= !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (element_type);
|
||||
inlinep = !! (specbits & (1 << (int) RID_INLINE));
|
||||
if (constp > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `const'");
|
||||
if (restrictp > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `restrict'");
|
||||
if (volatilep > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `volatile'");
|
||||
if (pedantic && !flag_isoc99)
|
||||
{
|
||||
if (constp > 1)
|
||||
pedwarn ("duplicate `const'");
|
||||
if (restrictp > 1)
|
||||
pedwarn ("duplicate `restrict'");
|
||||
if (volatilep > 1)
|
||||
pedwarn ("duplicate `volatile'");
|
||||
}
|
||||
if (! flag_gen_aux_info && (TYPE_QUALS (type)))
|
||||
type = TYPE_MAIN_VARIANT (type);
|
||||
type_quals = ((constp ? TYPE_QUAL_CONST : 0)
|
||||
|
@ -4087,12 +4090,15 @@ grokdeclarator (tree declarator, tree declspecs,
|
|||
|
||||
if (erred)
|
||||
error ("invalid type modifier within pointer declarator");
|
||||
if (constp > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `const'");
|
||||
if (volatilep > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `volatile'");
|
||||
if (restrictp > 1 && ! flag_isoc99)
|
||||
pedwarn ("duplicate `restrict'");
|
||||
if (pedantic && !flag_isoc99)
|
||||
{
|
||||
if (constp > 1)
|
||||
pedwarn ("duplicate `const'");
|
||||
if (volatilep > 1)
|
||||
pedwarn ("duplicate `volatile'");
|
||||
if (restrictp > 1)
|
||||
pedwarn ("duplicate `restrict'");
|
||||
}
|
||||
|
||||
type_quals = ((constp ? TYPE_QUAL_CONST : 0)
|
||||
| (restrictp ? TYPE_QUAL_RESTRICT : 0)
|
||||
|
|
12
gcc/testsuite/gcc.dg/c90-dupqual-1.c
Normal file
12
gcc/testsuite/gcc.dg/c90-dupqual-1.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=iso9899:1990 -pedantic-errors" } */
|
||||
|
||||
typedef const int CI;
|
||||
const const int c1; /* { dg-error "duplicate" } */
|
||||
const CI c2; /* { dg-error "duplicate" } */
|
||||
const CI *c3; /* { dg-error "duplicate" } */
|
||||
|
||||
typedef volatile int VI;
|
||||
volatile volatile int v1; /* { dg-error "duplicate" } */
|
||||
volatile VI v2; /* { dg-error "duplicate" } */
|
||||
volatile VI *v3; /* { dg-error "duplicate" } */
|
12
gcc/testsuite/gcc.dg/c99-dupqual-1.c
Normal file
12
gcc/testsuite/gcc.dg/c99-dupqual-1.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
|
||||
|
||||
typedef const int CI;
|
||||
const const int c1; /* { dg-bogus "duplicate" } */
|
||||
const CI c2; /* { dg-bogus "duplicate" } */
|
||||
const CI *c3; /* { dg-bogus "duplicate" } */
|
||||
|
||||
typedef volatile int VI;
|
||||
volatile volatile int v1; /* { dg-bogus "duplicate" } */
|
||||
volatile VI v2; /* { dg-bogus "duplicate" } */
|
||||
volatile VI *v3; /* { dg-bogus "duplicate" } */
|
12
gcc/testsuite/gcc.dg/gnu89-dupqual-1.c
Normal file
12
gcc/testsuite/gcc.dg/gnu89-dupqual-1.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=gnu89 -Werror" } */
|
||||
|
||||
typedef const int CI;
|
||||
const const int c1; /* { dg-bogus "duplicate" } */
|
||||
const CI c2; /* { dg-bogus "duplicate" } */
|
||||
const CI *c3; /* { dg-bogus "duplicate" } */
|
||||
|
||||
typedef volatile int VI;
|
||||
volatile volatile int v1; /* { dg-bogus "duplicate" } */
|
||||
volatile VI v2; /* { dg-bogus "duplicate" } */
|
||||
volatile VI *v3; /* { dg-bogus "duplicate" } */
|
Loading…
Add table
Reference in a new issue