------- Additional Comments From joseph at codesourcery dot com 2005-08-19
17:28 -------
Subject: Re: New: Implement binary constants with
a "0b" prefix
The patch does not document how the types of binary constants are
determined. I suppose the rules are the same as for octal and hexadecimal
constants, but the documentation needs to say so.
The patch does not document the 0B prefix, although the code accepts it.
The documentation should say @samp{0}, @samp{1}, @samp{0b}.
You can't write diagnostics like
+ SYNTAX_ERROR3 ("invalid digit \"%c\" in %s constant", '0' + max_digit,
+ radix == 2? "binary": "octal");
because this doesn't work with i18n. You need to have two separate
strings, each of them a complete sentence, rather than building up
sentences from fragments. If you use a conditional expression, check
whether you need to mark the strings with N_ to get them in cpplib.pot.
It's not clear how you ensure that someone can't write floating point
numbers as e.g. 0b1e2 (the check for floats says in part "radix <= 10 &&
(c == 'e' || c == 'E')" which would allow binary, being designed to allow
8 (0123e4 being decimal but looking like octal at first) and 10).
The patch is missing testcases. They should include that the values of
these constants (both 0b and 0B) are correct (both in the compiler and in
preprocessor conditionals), that the types follow the correct rules (which
need to be documented; see c99-intconst-1.c for how to test constant type
rules), that you can't write floating point numbers such as 0b1e2 or
0b1p3, and that these constants receive warnings with -pedantic and errors
with -pedantic-errors (for both C and C++, and for both the compiler and
the preprocessor).
If you don't already have a copyright assignment on file you may need to
get one. See <http://gcc.gnu.org/contribute.html>. As new features can't
go in until 4.1 has branched there should be plenty of time to do so
before a complete patch (submitted to gcc-patches) can be considered.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479