[libvirt] [PATCH] uml_conf.c: don't return an uninitialized pointer
Jim Meyering
jim at meyering.net
Thu Sep 3 11:44:21 UTC 2009
Jim Meyering wrote:
> Jim Meyering wrote:
>> Daniel P. Berrange wrote:
>> ...
>>>> Actually I did that first, but then un-did it in favor
>>>> of the change above. Why? because that initialization could
>>>> mask a failure to initialize in a new case.
>>>>
>>>> With per-case initialization, we'd detect the bug at
>>>> compile/static-analysis time. With the up-front unconditional
>>>> initialization, we cannot, and would have to rely on testing to find it.
>>>
>>> It is a tradeoff, but I still prefer the initialization at time of
>>> declaration as a safety net, and we do use this pattern pretty much
>>> everywhere
>>
>> Ok. adjusted
>
> Actually, I will now try to convince you that we should
> do it the other way. Not only is it better to have the compiler
> tell us about this problem, but if ever someone were to add the
> definition that seems to be missing in the default case, clang
> would report the preceding initialization (the one you prefer)
> as a "dead store" error.
>
> In fact, now that I'm looking at what clang calls
> dead initializations, I see just such a case in mdns.c:
>
> static void libvirtd_mdns_client_callback(AvahiClient *c, AvahiClientState state, void *userdata) {
> ...
> struct libvirtd_mdns_group *group = mdns->group;
> ...
>
> switch (state) {
> ...
> }
>
> And in every "case" of that switch, there is an assignment to "group".
> That renders the preceding assignment useless, and hence clang calls it
> a dead initialization.
Oops. That was inaccurate.
Each case does not set group.
However, each following *use* of group
is preceded by another assignment to that variable.
The point stands though.
More information about the libvir-list
mailing list