Eric Blake <ebl...@redhat.com> writes:

> *** WARNING: THE ATTACHED DOCUMENT(S) CONTAIN MACROS ***
> *** MACROS MAY CONTAIN MALICIOUS CODE ***
> *** Open only if you can verify and trust the sender ***
> *** Please contact info...@redhat.com if you have questions or concerns **

Another one.

> The method c_name() is supposed to do two different actions: munge
> '-' into '_', and add a 'q_' prefix to ticklish names.  But it did
> these steps out of order, making it possible to submit input that
> is not ticklish until after munging, where the output then lacked
> the desired prefix.
>
> The failure is exposed easily if you have a compiler that recognizes
> C11 keywords, and try to name a member '_Thread-local', as it would
> result in trying to compile the declaration 'uint64_t _Thread_local;'
> which is not valid.  However, this name violates our conventions
> (ultimately, want to enforce that no qapi names start with single
> underscore), so the test is slightly weaker by instead testing
> 'wchar-t'; the declaration 'uint64_t wchar_t;' is valid in C (where
> wchar_t is only a typedef) but fails with a C++ compiler (where it
> is a keyword).

Do we support compiling it with a C++ compiler?  To sidestep the
question, I'd say "but would fail".

In my private opinion, the one sane way to compile C code with a C++
compiler is wrapping it in extern "C" { ... }.

> Fix things by reversing the order of actions within c_name().
>
> Signed-off-by: Eric Blake <ebl...@redhat.com>

Again, just commit message polish, can do on merge.

Reply via email to