Re: [RFC][PATCH] fix casting constant to _Bool

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

 



On Sat, Jun 16, 2012 at 9:55 AM, Xi Wang <xi.wang@xxxxxxxxx> wrote:
> Casting to _Bool requires a zero test rather than truncation.
>
> Signed-off-by: Xi Wang <xi.wang@xxxxxxxxx>
> ---
> A simple example is:
>
>  _Bool x = 0x200;
>
> x should have been true rather than false.
>
> BTW, this patch also disables the warning "cast truncates bits from
> constant value".  Does that sound good?

That's unfortunate.

> A more serious problem is something like:
>
>  _Bool foo(int x) { return x; }
>
> sparse emits:
>
>  scast.1     %r2 <- (32) %arg1
>
> which makes sparse-llvm generate:
>
>  %R2 = trunc i32 %0 to i1
>
> My experimental backend "splay" has to treat _Bool specifically to
> generate:
>
>  %0 = icmp ne i32 %x, 0
>
> Should we leave the conversion job to backends, or should we just fix
> the sparse IR (e.g., emitting setne rather than scast for casts to _Bool)?

It'd be best if the backend didn't have to do anything special here.
Can we have it both ways? Not disable the warning but still deal with
it in the frontend?

> ---
>  expand.c |    6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/expand.c b/expand.c
> index 63a9075..ee818a4 100644
> --- a/expand.c
> +++ b/expand.c
> @@ -92,6 +92,12 @@ void cast_value(struct expression *expr, struct symbol *newtype,
>        value = get_longlong(old);
>
>  Int:
> +       // _Bool requires a zero test rather than truncation.
> +       if (is_bool_type(newtype)) {
> +               expr->value = value ? 1 : 0;
> +               return;
> +       }
> +
>        // Truncate it to the new size
>        signmask = 1ULL << (new_size-1);
>        mask = signmask | (signmask-1);
> --
> 1.7.9.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux