qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 1/1] Avoid compiler error when building block/bl


From: Blue Swirl
Subject: [Qemu-devel] Re: [PATCH 1/1] Avoid compiler error when building block/blkdebug.c with -Wtype-limits
Date: Fri, 10 Sep 2010 17:05:22 +0000

On Fri, Sep 10, 2010 at 2:04 PM,  <address@hidden> wrote:
> From: Jes Sorensen <address@hidden>
>
> Signed-off-by: Jes Sorensen <address@hidden>
> ---
>  block/blkdebug.c |    7 ++++++-
>  1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/block/blkdebug.c b/block/blkdebug.c
> index 2a63df9..17d796d 100644
> --- a/block/blkdebug.c
> +++ b/block/blkdebug.c
> @@ -439,7 +439,12 @@ static void blkdebug_debug_event(BlockDriverState *bs, 
> BlkDebugEvent event)
>     struct BlkdebugRule *rule;
>     BlkdebugVars old_vars = s->vars;
>
> -    if (event < 0 || event >= BLKDBG_EVENT_MAX) {
> +    /*
> +     * enum is not guaranteed to be signed on all archs, so cast to
> +     * int before the comparison against zero to avoid compiler
> +     * warning when building with -Wtype-limits
> +     */
> +    if ((int)event < 0 || event >= BLKDBG_EVENT_MAX) {

I changed 'if' to 'assert' in my version because the check could only
fail due to an internal error:
http://lists.nongnu.org/archive/html/qemu-devel/2010-09/msg00239.html

There's also Michael's version with a cast to unsigned int. It's a bit
simpler, the generated code is the same:
$ cat check.c
int f(int x)
{
        if (x < 0 || x > 1000)
                return 1;
        return 0;
}

int g(int x)
{
        if ((unsigned)x > 1000)
                return 1;
        return 0;
}

$ gcc -O -S check.c
$ head -20 check.s
        .file   "check.c"
        .text
.globl f
        .type   f, @function
f:
.LFB2:
        cmpl    $1000, %edi
        seta    %al
        movzbl  %al, %eax
        ret
.LFE2:
        .size   f, .-f
.globl g
        .type   g, @function
g:
.LFB3:
        cmpl    $1000, %edi
        seta    %al
        movzbl  %al, %eax
        ret



reply via email to

[Prev in Thread] Current Thread [Next in Thread]