This is the mail archive of the
cgen@sourceware.org
mailing list for the CGEN project.
Re: [PATCH] Make large enum constants unsigned
- From: "Frank Ch. Eigler" <fche at elastic dot org>
- To: Stefan Kristiansson <stefan dot kristiansson at saunalahti dot fi>
- Cc: cgen at sourceware dot org, Alan Modra <amodra at gmail dot com>, fche at sourceware dot org, Christian Svensson <blue at cmd dot nu>, Pierre Muller <pierre dot muller at ics-cnrs dot unistra dot fr>, "Maciej W. Rozycki" <macro at codesourcery dot com>
- Date: Thu, 22 May 2014 11:09:56 -0400
- Subject: Re: [PATCH] Make large enum constants unsigned
- Authentication-results: sourceware.org; auth=none
- References: <20140522052921 dot GA30609 at chokladfabriken dot org>
Hi -
> this fixes a bug noted in two threads on the binutils mailing list:
> https://sourceware.org/ml/binutils/2014-05/msg00152.html
> https://sourceware.org/ml/binutils/2014-05/msg00195.html
>
> Both threads describe the problem pretty well, but the gist of it
> is that constants are generated that will be interpreted as signed.
>
> 2014-05-22 Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
>
> * enum.scm (gen-enum-decl): Emit 'ULL' after constants larger than
> #x80000000
> [...]
> - (number->string (cadr e))
> + (string-append (number->string (cadr e))
> + (if (> (cadr e)
> + #x80000000)
> + "ULL" ""))
Have you thought of having cgen emit it as
(string-append "(signed int)" (number->string (cadr e)))
... or even find a number->string conversion function that takes into
account the destionation language's encoding constraints.
- FChE