Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jun 2009 14:20:55 +0300
From:      Andriy Gapon <avg@icyb.net.ua>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>, Adrian Chadd <adrian@freebsd.org>
Cc:        Roman Divacky <rdivacky@freebsd.org>, current@freebsd.org
Subject:   Re: [PATCH]: if (cond); foo() in firewire
Message-ID:  <4A3F6917.7040806@icyb.net.ua>
In-Reply-To: <20090622045428.GA18123@troutmask.apl.washington.edu>
References:  <20090621082022.GA88526@freebsd.org>	<d763ac660906212104w4bf066eatf5529779e603bd0e@mail.gmail.com> <20090622045428.GA18123@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
on 22/06/2009 07:54 Steve Kargl said the following:
> On Mon, Jun 22, 2009 at 12:04:49PM +0800, Adrian Chadd wrote:
>> 2009/6/21 Roman Divacky <rdivacky@freebsd.org>:
>>> hi
>>>
>>> is this patch correct? may I commit it?
>>>
>>> Index: ../../../dev/firewire/fwdev.c
>>> ===================================================================
>>> --- ../../../dev/firewire/fwdev.c       (revision 194573)
>>> +++ ../../../dev/firewire/fwdev.c       (working copy)
>>> @@ -443,7 +443,7 @@
>>>        xfer->send.pay_len = uio->uio_resid;
>>>        if (uio->uio_resid > 0) {
>>>                if ((err = uiomove((caddr_t)&xfer->send.payload[0],
>>> -                   uio->uio_resid, uio)));
>>> +                   uio->uio_resid, uio)))
>>>                        goto out;
>>>        }
>>>
>>>
>>> another bug found by the "useless warnings in clang" ;)
>> Is clang also evaluating all subsequent execution paths to tell you
>> what the change in program flow is? :)
>>
>> I hate to be the harbinger of evilness, but I'd at least attempt a
>> cursory glance at the code to make sure subsequent code is doing the
>> right thing. (It certainly looks like a vanilla userland transfer!)

You confuse me. It is a "vanilla userland transfer", but so?
Current code always goes to "out" label regardless if uimove succeeded or not.
I think the idea was to go "out" only if uimove failed and execute some code
between if and out-label otherwise.


> I agree with you.  Nothing like side effects to screw up 
> a persons clang.


You confuse me, what this has to do with side-effects?
I think that Clang is right - 'if' without "then" is suspicious because either you
have a useless/redundant 'if' statement (as in you example below - just call
side_effect(&i) without putting it under if) or you accidentally put semicolon
where you shouldn't have.

> #include <stdio.h>
> #include <stdlib.h>
> 
> static int
> side_effect(int *i)
> {
>    *i = 42;
>    return 0;
> }
> 
> int 
> main(void)
> {
>    int i;
>    if (side_effect(&i));
>    if (i == 42)
>       printf("%d\n", i);
>    return 0;
> }
> 


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A3F6917.7040806>