Richard Guenther <richard.guent...@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