On Wed, 14 Apr 2021 at 18:26, Daniel P. Berrangé <berra...@redhat.com> wrote: > > On Tue, Apr 13, 2021 at 06:08:49PM +0200, Paolo Bonzini wrote: > > System headers may include templates if compiled with a C++ compiler, > > which cause the compiler to complain if qemu/osdep.h is included > > within a C++ source file's 'extern "C"' block. Add > > an 'extern "C"' block directly to qemu/osdep.h, so that > > system headers can be kept out of it. > > > > There is a stray declaration early in qemu/osdep.h, which needs > > to be special cased. Add a definition in qemu/compiler.h to > > make it look nice. > > > > config-host.h, CONFIG_TARGET, exec/poison.h and qemu/compiler.h > > are included outside the 'extern "C"' block; that is not > > an issue because they consist entirely of preprocessor directives. > > > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > > --- > > disas/nanomips.cpp | 2 +- > > include/qemu/compiler.h | 6 ++++++ > > include/qemu/osdep.h | 10 +++++++++- > > 3 files changed, 16 insertions(+), 2 deletions(-) > > > > diff --git a/disas/nanomips.cpp b/disas/nanomips.cpp > > index 2b09655271..8ddef897f0 100644 > > --- a/disas/nanomips.cpp > > +++ b/disas/nanomips.cpp > > @@ -27,8 +27,8 @@ > > * Reference Manual", Revision 01.01, April 27, 2018 > > */ > > > > -extern "C" { > > #include "qemu/osdep.h" > > +extern "C" { > > #include "disas/dis-asm.h" > > }
> This and os-posix.h both include other system headers. We don't currently > have problem, so this is ok as the minimal fix for 6.0, but long term we > need more work on this header to further narrow the extern {} block. The other path where we can include system headers inside extern "C" is that the code above still has dis-asm.h inside the extern C block, but dis-asm.h includes qemu/bswap.h (midway down the file!) and bswap.h in turn includes some system headers. thanks -- PMM