This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug preprocessor/70811] New: error on #pragma GCC diagnostic in an enum
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 26 Apr 2016 18:25:12 +0000
- Subject: [Bug preprocessor/70811] New: error on #pragma GCC diagnostic in an enum
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70811
Bug ID: 70811
Summary: error on #pragma GCC diagnostic in an enum
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: preprocessor
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
GCC gives a syntax error when #pragma GCC diagnostic appears in the
enumeraror-list of a definition of an enumerator (for example, when attempting
to suppress a warning about the constant-expression used to assign to one of
the enumerators, as in the example below). GCC does not give an error when
#pragma push_macro is used in the same place.
I couldn't find anything about this limitation in the manual. If it is a known
limitation or one that cannot be fixed the manual should be updated to mention
it. AFAICS, the C standard allows implementations to fail to translate
programs with implementation-defined pragmas but it does require them to
document this (implementation-defined) behavior.
$ cat -n v.c && /home/msebor/build/gcc-trunk-git/gcc/xgcc
-B/home/msebor/build/gcc-trunk-git/gcc -S -Wall -Wextra -Wpedantic -xc v.c
1 enum E
2 {
3 e = "a" - "a"
4 };
5
6 enum F
7 {
8 #pragma GCC diagnostic ignored "-Waddress"
9 f = "b" - "b"
10 };
11
v.c:3:9: warning: enumerator value for âeâ is not an integer constant
expression [-Wpedantic]
e = "a" - "a"
^~~
v.c:8:9: error: expected identifier before â#pragmaâ
#pragma GCC diagnostic ignored "-Waddress"
^~~