This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/14273] New: __attribute__ ((__unused__)) fails when attached to a label in c++
- From: "msp at nortelnetworks dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Feb 2004 13:51:32 -0000
- Subject: [Bug c++/14273] New: __attribute__ ((__unused__)) fails when attached to a label in c++
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Bison 1.875 generates code which contains something like this:-
yyerrlab1:
__attribute__ ((__unused__))
Now this works for C compilation (ie. tells the compiler yyerrlab1 might not be
used, so stops the compiler generating a warning), but fails to compile for C++.
The following test code is similar to what bison does. It compiles for C, but
not for C++:-
void fred()
{
int x;
yyerrlab1:
__attribute__ ((__unused__))
x = 42;
}
p.cc: In function `void fred()':
p.cc:8: error: ISO C++ forbids declaration of `x' with no type
p.cc:8: error: redeclaration of `int x'
p.cc:3: error: `int x' previously declared here
p.cc:8: error: declaration of `int x'
p.cc:3: error: conflicts with previous declaration `int x'
The documentation "Attribute Syntax" info node appears to say this should work:-
" An attribute specifier list may appear after the colon following a
label, other than a `case' or `default' label. The only attribute it
makes sense to use after a label is `unused'. This feature is intended
for code generated by programs which contains labels that may be unused
but which is compiled with `-Wall'. It would not normally be
appropriate to use in it human-written code, though it could be useful
in cases where the code that jumps to the label is contained within an
`#ifdef' conditional.
"
--
Summary: __attribute__ ((__unused__)) fails when attached to a
label in c++
Product: gcc
Version: 3.3.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: msp at nortelnetworks dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: sparc-sun-solaris2.8
GCC host triplet: sparc-sun-solaris2.8
GCC target triplet: sparc-sun-solaris2.8
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14273