c/8420: volatile after the type specifier for an unnamed structure is rejected
ehrhardt@mathematik.uni-ulm.de
ehrhardt@mathematik.uni-ulm.de
Fri Nov 1 02:16:00 GMT 2002
>Number: 8420
>Category: c
>Synopsis: volatile after the type specifier for an unnamed structure is rejected
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: unassigned
>State: open
>Class: rejects-legal
>Submitter-Id: net
>Arrival-Date: Fri Nov 01 02:16:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Christian Ehrhardt
>Release: gcc-3.2
>Organization:
>Environment:
theseus$ uname -a
SunOS theseus 5.9 Generic_112233-02 sun4u sparc SUNW,Ultra-4
theseus$ gcc -v
Reading specs from /usr/local/bin/../lib/gcc-lib/sparc-sun-solaris2.9/3.2/specs
Configured with: /export/local/manager/playground/ULMgcc32/src/gcc-3.2/configure --with-ld=/usr/local/bin/ld --with-gnu-ld --with-as=/usr/local/bin/as --with-gnu-as --prefix=/usr/local/
Thread model: posix
gcc version 3.2
>Description:
This source file is rejected:
struct a {
struct { int x; } volatile a;
}; /* OK */
struct b {
volatile struct { int x; } ;
}; /* OK */
struct c {
struct { int x; } volatile;
}; /* ERROR */
theseus$ gcc -Wall -c t.c
t.c:10: unnamed fields of type other than struct or union are not allowed
This code is made up to demonstrate a problem found while reading the
source: grokfield is called for a field declaration without an identifier
and tries to check that the field type is a structure or union.
However, grokfield assumes that the type specifier is the first element
in the list passed as declspecs which is not necessarily true.
Given the other two examples (struct a and struct b) which are accepted
this code should probably be legal. Even if it is illegal the error message
is wrong.
>How-To-Repeat:
See description above.
>Fix:
A workaround is to move the volatile keyword before the struct.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the Gcc-prs
mailing list