[Qemu-devel] [PATCH 0/1] Developer Conveniences - check for _Static_assert and use in QEMU_BUILD_BUG_ON

Andreas Grapentin posted 1 patch 7 years, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20170314144453.5027-1-andreas@grapentin.org
Test checkpatch passed
Test docker passed
configure               | 18 ++++++++++++++++++
include/qemu/compiler.h |  4 +++-
2 files changed, 21 insertions(+), 1 deletion(-)
[Qemu-devel] [PATCH 0/1] Developer Conveniences - check for _Static_assert and use in QEMU_BUILD_BUG_ON
Posted by Andreas Grapentin 7 years, 1 month ago
(as taken from here: http://wiki.qemu-project.org/Contribute/BiteSizedTasks)


I added a configure check for C11's _Static_assert, and based on the outcome,
QEMU_BUILD_BUG_ON will now produce slightly more readable results on failures.

Systems without C11 conforming compilers will still have the old messages, as
verified by intentionally breaking the configure check.

the following example output was generated by inverting the condition in
QEMU_BUILD_BUG_ON:

without _Static_assert:

> In file included from /home/andi/research/qemu-shared-memory/qemu/include/qemu/osdep.h:36:0,
>                  from /home/andi/research/qemu-shared-memory/qemu/qga/commands.c:13:
> /home/andi/research/qemu-shared-memory/qemu/qga/commands.c: In function ‘qmp_guest_exec_status’:
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/compiler.h:89:12: error: negative width in bit-field ‘<anonymous>’
>      struct { \
>             ^
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/compiler.h:96:38: note: in expansion of macro  QEMU_BUILD_BUG_ON_STRUCT’
>  #define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
>                                       ^~~~~~~~~~~~~~~~~~~~~~~~
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/atomic.h:146:5: note: in expansion of macro ‘QEMU_BUILD_BUG_ON’
>      QEMU_BUILD_BUG_ON(sizeof(*ptr) > sizeof(void *));   \
>      ^~~~~~~~~~~~~~~~~
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/atomic.h:417:5: note: in expansion of macro ‘atomic_load_acquire’
>      atomic_load_acquire(ptr)
>      ^~~~~~~~~~~~~~~~~~~
> /home/andi/research/qemu-shared-memory/qemu/qga/commands.c:160:21: note: in expansion of macro ‘atomic_mb_read’
>      bool finished = atomic_mb_read(&gei->finished);
>                      ^~~~~~~~~~~~~~

with _Static_assert:

> In file included from /home/andi/research/qemu-shared-memory/qemu/include/qemu/osdep.h:36:0,
>                  from /home/andi/research/qemu-shared-memory/qemu/qga/commands.c:13:
> /home/andi/research/qemu-shared-memory/qemu/qga/commands.c: In function ‘qmp_guest_exec_status’:
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/compiler.h:94:30: error: static assertion failed: "sizeof(*&gei->finished) > sizeof(void *)"
>  #define QEMU_BUILD_BUG_ON(x) _Static_assert((x), #x)
>                               ^
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/atomic.h:146:5: note: in expansion of macro ‘QEMU_BUILD_BUG_ON’
>      QEMU_BUILD_BUG_ON(sizeof(*ptr) > sizeof(void *));   \
>      ^~~~~~~~~~~~~~~~~
> /home/andi/research/qemu-shared-memory/qemu/include/qemu/atomic.h:417:5: note: in expansion of macro ‘atomic_load_acquire’
>      atomic_load_acquire(ptr)
>      ^~~~~~~~~~~~~~~~~~~
> /home/andi/research/qemu-shared-memory/qemu/qga/commands.c:160:21: note: in expansion of macro ‘atomic_mb_read’
>      bool finished = atomic_mb_read(&gei->finished);
>                      ^~~~~~~~~~~~~~




Andreas Grapentin (1):
  added configure check for _Static_assert and updated
    QEMU_BUILD_BUG_ON(...) accordingly

 configure               | 18 ++++++++++++++++++
 include/qemu/compiler.h |  4 +++-
 2 files changed, 21 insertions(+), 1 deletion(-)

-- 
2.12.0


Re: [Qemu-devel] [PATCH 0/1] Developer Conveniences - check for _Static_assert and use in QEMU_BUILD_BUG_ON
Posted by Eric Blake 7 years, 1 month ago
On 03/14/2017 09:44 AM, Andreas Grapentin wrote:
> 
> (as taken from here: http://wiki.qemu-project.org/Contribute/BiteSizedTasks)
> 

A single patch can be sent without a cover letter if desired (0/N cover
letters are only mandatory on patch series).  In fact, much of the
information you give here:

> 
> I added a configure check for C11's _Static_assert, and based on the outcome,
> QEMU_BUILD_BUG_ON will now produce slightly more readable results on failures.
> 
> Systems without C11 conforming compilers will still have the old messages, as
> verified by intentionally breaking the configure check.
> 
> the following example output was generated by inverting the condition in
> QEMU_BUILD_BUG_ON:
> 
> without _Static_assert:
> 
...

> with _Static_assert:
> 
>> In file included from /home/andi/research/qemu-shared-memory/qemu/include/qemu/osdep.h:36:0,
>>                  from /home/andi/research/qemu-shared-memory/qemu/qga/commands.c:13:
>> /home/andi/research/qemu-shared-memory/qemu/qga/commands.c: In function ‘qmp_guest_exec_status’:
>> /home/andi/research/qemu-shared-memory/qemu/include/qemu/compiler.h:94:30: error: static assertion failed: "sizeof(*&gei->finished) > sizeof(void *)"
>>  #define QEMU_BUILD_BUG_ON(x) _Static_assert((x), #x)
>>                               ^

should be in the commit message of the actual patch (right now, your 1/1
message has a rather blank commit message).

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org