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