https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117241
Bug ID: 117241
Summary: Various pedwarns in c-decl.cc are behind
!in_system_header_at
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: arsen at gcc dot gnu.org
Target Milestone: ---
When trying to check a libc for >C90 features in headers by running compiling
with:
-std=c89 -pedantic-errors -Wsystem-headers -x c /dev/null -isystem
sysroot/usr/include -include <header>.h
... it was noted that flexible array members weren't being reported. Take, for
instance, the following TU:
# 1 "/tmp/hg/test.h" 3 4
struct S { char x; char name[]; };
... this should emit a warning (and indeed swapping '3 4' with '1' makes the
warning appear), but does not due to this check:
if (flexible_array_member
&& !in_system_header_at (input_location))
pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
"support flexible array members");
in c-decl.cc:grokdeclarator. When removing the in_system_header_at check,
-Wsystem-headers seemed to be understood correctly:
~/gcc/_b_coro-fixes/gcc 1 $ git -C ~/gcc/coro-fixes --no-pager diff
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index aa7f69d1b7bc..f7387b9b7711 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -7490,7 +7490,7 @@ grokdeclarator (const struct c_declarator *declarator,
flexible_array_member = (t->kind == cdk_id);
}
if (flexible_array_member
- && !in_system_header_at (input_location))
+ && !0)//in_system_header_at (input_location))
pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
"support flexible array members");
~/gcc/_b_coro-fixes/gcc$ ./cc1 -quiet -v - -quiet -dumpbase - -mtune=generic
-march=x86-64 -pedantic-errors -std=c90 -version -fpreprocessed -o /dev/null
-fcf-protection<<-EOF
# 1 "/tmp/hg/test.h" 3
struct S { char x; char name[]; };
EOF
GNU C89 (GCC) version 15.0.0 20240927 (experimental) (x86_64-pc-linux-gnu)
compiled by GNU C version 14.2.1 20240921, GMP version 6.3.0, MPFR
version 4.2.1, MPC version 1.3.1, isl version isl-0.27-GMP
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory
"/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/include
/home/arsen/gcc/_b_coro-fixes/_pfx/include
/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/include-fixed
/usr/include
End of search list.
Compiler executable checksum: 175a97d69d759221b576ba224ecb364c
~/gcc/_b_coro-fixes/gcc$ ./cc1 -Wsystem-headers -quiet -v - -quiet -dumpbase
- -mtune=generic -march=x86-64 -pedantic-errors -std=c90 -ve
rsion -fpreprocessed -o /dev/null -fcf-protection<<-EOF
# 1 "/tmp/hg/test.h" 3
struct S { char x; char name[]; };
EOF
GNU C89 (GCC) version 15.0.0 20240927 (experimental) (x86_64-pc-linux-gnu)
compiled by GNU C version 14.2.1 20240921, GMP version 6.3.0, MPFR
version 4.2.1, MPC version 1.3.1, isl version isl-0.27-GMP
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory
"/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/include
/home/arsen/gcc/_b_coro-fixes/_pfx/include
/home/arsen/gcc/_b_coro-fixes/_pfx/lib/gcc/x86_64-pc-linux-gnu/15.0.0/include-fixed
/usr/include
End of search list.
Compiler executable checksum: 175a97d69d759221b576ba224ecb364c
/tmp/hg/test.h:1:25: error: ISO C90 does not support flexible array members
[-Wpedantic]
1 | struct S { char x; char name[]; };
| ^~~~
~/gcc/_b_coro-fixes/gcc 1 $
... so, perhaps the checks are an artifact of a bygone time before
-Wsystem-headers :-)