http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50777
Rainer Orth <ro at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011-10-18 CC| |bonzini at gnu dot org, ian | |at airs dot com Target Milestone|--- |4.7.0 Ever Confirmed|0 |1 --- Comment #2 from Rainer Orth <ro at gcc dot gnu.org> 2011-10-18 16:09:06 UTC --- They are, via system.h. The problem is twofold: * madvise(3) is declared in <sys/mman.h> conditionally: in the Solaris 10 version of the header, we have: #ifdef __STDC__ #if (_POSIX_C_SOURCE > 2) || defined(_XPG4_2) ... #else /* (_POSIX_C_SOURCE > 2) || defined(_XPG4_2) */ ... extern int madvise(caddr_t, size_t, int)... ... #endif /* (_POSIX_C_SOURCE > 2) || defined(_XPG4_2) */ * configure uses the C compiler to detect support for madvise() and finds it, while the actual compilation happens with g++, which defines _XOPEN_SOURCE=600, among others, which hides the declaration. In Solaris 11, there's no issue AFAICS since with __EXTENSIONS__ defined (which configure takes care of), the madivse() prototype is visible. I'm currently running a bootstrap to verify this. There are two options: * Actually perform the configure tests with the compiler to be used (g++) instead of gcc. Everything else is bound to yield bogus results once in a while, or at least do so for madvise. * Hack around this with fixincludes, but in this case I'd consider this a bug by itself. Paolo, Ian, suggestions? Rainer