Re: [PATCH] Make large enum constants unsigned
Stefan Kristiansson <[email protected]>
| Newsgroups | gmane.comp.tools.cgen.devel |
|---|---|
| Message-ID | <CADzBsGObK_dNY81Lcv8HgPAP800xv2H8vf80M96-NfMo-CXcPA@mail.gmail.com> |
On Thu, May 22, 2014 at 9:21 AM, Maciej W. Rozycki <[email protected]> wrote: > On Thu, 22 May 2014, Stefan Kristiansson wrote: > >> 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 <[email protected]> >> >> * enum.scm (gen-enum-decl): Emit 'ULL' after constants larger than >> #x80000000 > > Well, `ULL' is non-standard for pre-C99 compilers and also not needed > because an enum will never have a type that is wider than `int'. So for > portability's sake I suggest that you use `U' or `u' as I proposed (I > prefer lowercase `u' for decimal constants because I find it easier to > spot among digits, however please feel free to take your pick). > Hmm, right. I actually had a plain 'U' in my first version of the patch, but then changed it to 'ULL' last minute with the thought of being future proof against possible larger mask values. But as you point out, that will have issues anyway, so I'll repost with the original patch. As for 'u' vs 'U', a 'U' is emitted in the .h file even if I put a 'u' in the .scm. If 'u' in the output is preferred, maybe someone can point out the reason for this? Stefan