From: Eric Blake <eblake@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Tony Nguyen" <tony.nguyen@bt.com>,
qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH] memory: Set notdirty_mem_ops validator
Date: Fri, 6 Sep 2019 08:44:08 -0500 [thread overview]
Message-ID: <c1159dea-d68c-1143-a000-1320a1e39fb7@redhat.com> (raw)
In-Reply-To: <867bdb4b-3eef-0660-6db2-a2e6a0ab5a0e@redhat.com>
On 9/6/19 8:24 AM, Philippe Mathieu-Daudé wrote:
>>>> static const MemoryRegionOps notdirty_mem_ops = {
>>>> .write = notdirty_mem_write,
>>>> - .valid.accepts = notdirty_mem_accepts,
>>>> .endianness = DEVICE_NATIVE_ENDIAN,
>>>> .valid = {
>>>> .min_access_size = 1,
>>>> .max_access_size = 8,
>>>> .unaligned = false,
>>>> + .accepts = notdirty_mem_accepts,
>>>
>>> I'm surprised the compiler doesn't emit any warning...
>>
>> Same here.
>>
>> But reading
>> https://en.cppreference.com/w/c/language/struct_initialization, this is
>> compliant behavior:
>>
>> "However, when an initializer begins with a left open brace, its current
>> object is fully re-initialized and any prior explicit initializers for
>> any of its subobjects are ignored:"
>>
>> so it is worth filing a gcc bug asking for a QoI improvement in adding a
>> warning (since the code does not violate the C standard, but does cause
>> surprises in the reinitialization of omitted members in the later {} to
>> go back to 0 in spite of the earlier initialization by nested name).
>
> Just remembered another case of (correct) reinitialization in
> hw/arm/palm.c:101:
We use nested reinitialization in multiple places. A gcc warning would
have to be discriminating enough to NOT warn merely when something is
listed twice...:
>
> static struct {
> int row;
> int column;
> } palmte_keymap[0x80] = {
> [0 ... 0x7f] = { -1, -1 },
> [0x3b] = { 0, 0 }, /* F1 -> Calendar */
Here, [0x3b].row and [0x3b].column are listed twice, but both of the
second listings are explicit.
Similarly, in qobject/json-lexer.c:
static const uint8_t json_lexer[][256] = {
/* Relies on default initialization to IN_ERROR! */
...
/*
* Two start states:
* - IN_START recognizes JSON tokens with our string extensions
* - IN_START_INTERP additionally recognizes interpolation.
*/
[IN_START ... IN_START_INTERP] = {
['"'] = IN_DQ_STRING,
...
['\n'] = IN_START,
},
[IN_START_INTERP]['%'] = IN_INTERP,
};
Done that way on purpose (I actually remember scratching my head on the
best way to compress things while reviewing Markus' patch that ended up
as 2cbd15aa6f; it took me a couple of tries off-list to end up at that
override).
...rather, the gcc warning that I envision should ONLY be when a later
partial ={} causes a zero-initialization override of an earlier explicit
.member, and NOT when a later complete ={} or explicit member overrides
an earlier init (whether the earlier one was explicit due to .member or
implicit due to partial ={}).
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2019-09-06 13:45 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-02 1:26 [Qemu-devel] [PATCH] memory: Set notdirty_mem_ops validator Tony Nguyen
2019-09-03 10:21 ` Peter Xu
2019-09-03 10:25 ` Peter Maydell
2019-09-03 16:47 ` Tony Nguyen
2019-09-03 16:50 ` Peter Maydell
2019-09-04 2:40 ` Peter Xu
2019-09-06 14:14 ` Peter Maydell
2019-09-04 6:17 ` Tony Nguyen
2019-09-06 8:28 ` Philippe Mathieu-Daudé
2019-09-06 13:08 ` Eric Blake
2019-09-06 13:24 ` Philippe Mathieu-Daudé
2019-09-06 13:44 ` Eric Blake [this message]
2019-09-06 16:04 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c1159dea-d68c-1143-a000-1320a1e39fb7@redhat.com \
--to=eblake@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=tony.nguyen@bt.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).