On 07/07/2023 22.22, Konstantin Kostiuk wrote:


On Fri, Jul 7, 2023 at 6:36 PM Philippe Mathieu-Daudé <phi...@linaro.org <mailto:phi...@linaro.org>> wrote:

    On 7/7/23 16:24, Konstantin Kostiuk wrote:
     >
     >
     > On Fri, Jul 7, 2023 at 1:33 PM Philippe Mathieu-Daudé
    <phi...@linaro.org <mailto:phi...@linaro.org>
     > <mailto:phi...@linaro.org <mailto:phi...@linaro.org>>> wrote:
     >
     >     On 7/7/23 11:22, Konstantin Kostiuk wrote:
     >      > Signed-off-by: Konstantin Kostiuk <kkost...@redhat.com
    <mailto:kkost...@redhat.com>
     >     <mailto:kkost...@redhat.com <mailto:kkost...@redhat.com>>>
     >      > ---
     >      >   qga/vss-win32/meson.build   |  2 +-
     >      >   qga/vss-win32/vss-debug.cpp | 31 +++++++++++++++++++++++++++++++
     >      >   qga/vss-win32/vss-debug.h   | 25 +++++++++++++++++++++++++
     >      >   3 files changed, 57 insertions(+), 1 deletion(-)
     >      >   create mode 100644 qga/vss-win32/vss-debug.cpp
     >      >   create mode 100644 qga/vss-win32/vss-debug.h
     >
     >
     >      > diff --git a/qga/vss-win32/vss-debug.cpp
     >     b/qga/vss-win32/vss-debug.cpp
     >      > new file mode 100644
     >      > index 0000000000..5d6f37944b
     >      > --- /dev/null
     >      > +++ b/qga/vss-win32/vss-debug.cpp
     >      > @@ -0,0 +1,31 @@
     >      > +/*
     >      > + * QEMU Guest Agent VSS debug declarations
     >      > + *
     >      > + * Copyright (C) 2023 Red Hat Inc
     >      > + *
     >      > + * Authors:
     >      > + *  Konstantin Kostiuk <kkost...@redhat.com
    <mailto:kkost...@redhat.com>
     >     <mailto:kkost...@redhat.com <mailto:kkost...@redhat.com>>>
     >      > + *
     >      > + * This work is licensed under the terms of the GNU GPL, version
     >     2 or later.
     >      > + * See the COPYING file in the top-level directory.
     >      > + */
     >      > +
     >      > +#include "qemu/osdep.h"
     >      > +#include "vss-debug.h"
     >      > +#include "vss-common.h"
     >      > +
     >      > +void qga_debug_internal(const char *funcname, const char *fmt,
     >     ...)  {
     >      > +    char user_sting[512] = {0};
     >
     >     "user_string"
     >
     >      > +    char full_string[640] = {0};
     >      > +
     >      > +    va_list args;
     >      > +    va_start(args, fmt);
     >      > +    vsnprintf(user_sting, 512, fmt, args);
     >
     >     ARRAY_SIZE(user_string)
     >
     >
     > I have a problem with ARRAY_SIZE define.
     >
     > ../qga/vss-win32/vss-debug.cpp: In function 'void
     > qga_debug_internal(const char*, const char*, ...)':
     > /src/include/qemu/compiler.h:70:12: error: types may not be defined in
     > 'sizeof' expressions
     >     70 |     struct { \
     >        |            ^
     > /src/include/qemu/compiler.h:78:43: note: in expansion of macro
     > 'QEMU_BUILD_BUG_ON_STRUCT'
     >     78 | #define QEMU_BUILD_BUG_ON_ZERO(x)
     > (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
>        | ^~~~~~~~~~~~~~~~~~~~~~~~
     > /src/include/qemu/osdep.h:474:24: note: in expansion of macro
     > 'QEMU_BUILD_BUG_ON_ZERO'
>    474 |  QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
     >        |                        ^~~~~~~~~~~~~~~~~~~~~~
     > ../qga/vss-win32/vss-debug.cpp:23:32: note: in expansion of macro
     > 'ARRAY_SIZE'
     >     23 |     if (vsnprintf(user_string, ARRAY_SIZE(user_string), fmt,
     > args) <= 0) {
     >        |                                ^~~~~~~~~~
     > /src/include/qemu/osdep.h:470:57: error: expected primary-expression
     > before 'typeof'
     >    470 | #define QEMU_IS_ARRAY(x)
     > (!__builtin_types_compatible_p(typeof(x), \
     >        |                                                         ^~~~~~
     > /src/include/qemu/compiler.h:71:14: note: in definition of macro
     > 'QEMU_BUILD_BUG_ON_STRUCT'
     >     71 |         int:(x) ? -1 : 1; \
     >        |              ^
     > /src/include/qemu/osdep.h:474:24: note: in expansion of macro
     > 'QEMU_BUILD_BUG_ON_ZERO'
>    474 |  QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
     >        |                        ^~~~~~~~~~~~~~~~~~~~~~
     > /src/include/qemu/osdep.h:474:48: note: in expansion of macro
     > 'QEMU_IS_ARRAY'
>    474 |  QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
     >
     > Can you help with this?

    Eh no clue, maybe not C++ compliant?

    Fall back to sizeof() ¯\_(ツ)_/¯


You are right, When I rename the file to vss-debug.c the error disappears.
What is the better solution:
1) use vss-debug.c and extern "C" { #include "vss-debug.h" } in CPP files
2) just use sizeof() in CPP

I recently sent a patch to drop the logic for linking C code with C++ code:

 https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg01553.html

So please go with option 2 ;-)

 Thomas


Reply via email to