This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch 4.6] In system.h, wrap include of C++ header in 'extern C++'
Richard Guenther <richard.guenther@gmail.com> writes:
> Ian - you added this include in rev. 167764, I don't think that was "proper".
> But I'm not sure wrapping a system.h include inside extern "C" from a C++
> plugin is proper either ...
I did commit 167764 but I didn't write it. It's from
http://gcc.gnu.org/ml/gcc-patches/2010-11/msg02567.html
http://gcc.gnu.org/PR46650
The patch is there because system.h poisons strerror. Clearly we have
to #include <string.h> before poisoning strerror. And we do. But when
we #include C++ headers, some of the C++ headers #include <cstring>. So
system.h needs to do that also.
I think there is no question that as long as system.h poisons strerror,
we need to arrange to #include both <string.h> and <cstring> before that
poisoning, and that the natural way to ensure that is to #include both
in <system.h>. And that is what we do today.
I don't really know what the right solution is here, because I don't
know how we feel about wrapping #include "system.h" in extern "C". A
simple workaround is to #include <cstring> before the #include
"system.h". Or the OP's patch using extern "C++" is a simple workaround
within system.h.
Or maybe we simply drop the poison of strerror, and then system.h
doesn't need to #include <cstring> anyhow.
Ian