On Sun, 25 Mar 2012, Alexander Kabaev wrote:
On Wed, 21 Mar 2012 20:55:22 +0000 (UTC)
Marius Strobl <mar...@freebsd.org> wrote:
<SKIP>
Modified: head/sys/sys/libkern.h
==============================================================================
--- head/sys/sys/libkern.h Wed Mar 21 20:53:47 2012
(r233287) +++ head/sys/sys/libkern.h Wed Mar 21 20:55:21
2012 (r233288) @@ -121,7 +121,7 @@ size_t strspn(const
char *, const char char *strstr(const char *, const char *);
int strvalid(const char *, size_t);
-extern uint32_t crc32_tab[];
+extern const uint32_t const crc32_tab[];
static __inline uint32_t
crc32_raw(const void *buf, size_t size, uint32_t crc)
g++ produces "error: duplicate 'const'" on this changed line. Leaving
the question as to why this file is ever being compiled by C++ on the
conscience of of VirtualBox authors, I would suggest partially backing
out this commit and getting easier on 'const' for C++'s sake.
It does have a duplicate `const'. This is not just a style bug, since
duplicate type qualifiers are a constraint error in C90, and apparently
in C++.
TenDRA says that it violates [ISO C90 6.5.3], and indeed 6.5.3 says:
Constraints
The same type qualifier shall not appear more than once...
either directly [as here] or via one or more typedefs.
6.5.3 in C90 corresponds to 6.7.3 in C99, and C99 no longer says this.
This change causes many confusing variations in behaviour:
For CC=gcc-3.3.3:
- ${CC} without -pedantic warns about this
- ${CC} -std=c89 without -pedantic warns about this
- ${CC} -std=c99 with -pedantic doesn't warn about this (correct)
For CC=gcc-3.4.6 and gcc-4.2.1:
- ${CC} without -pedantic doesn't warn about this (broken)
- ${CC} with -pedantic warns about this
- ${CC} -std=c89 without -pedantic doesn't warn about this (broken)
- ${CC} -std=c99 with -pedantic doesn't warn about this (correct)
For CC=clang:
- ${CC} without -pedantic doesn't warn about this (broken)
- ${CC} with -pedantic doesn't warn about this (broken)
(maybe it defaults to c99, but that
is an even larger incompatibility)
- ${CC} -std=c89 without -pedantic doesn't warn about this (broken)
- ${CC} -std=c99 with -pedantic doesn't warn about this (correct)
For C++: apparently, closest to gcc-3.3.3 and C90.
There are also complications with warnings being broken by default in
"system" headers:
- if libkern.h is a "system" header, then to detect this bug in it,
-Wsystem-headers must be added to CFLAGS for one the non-broken cases
non-c99 cases above.
Bruce
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"