[cfe-dev] Posix format strings
Paul Curtis
plc at rowley.co.uk
Fri Dec 3 02:05:47 PST 2010
Hi Ted,
[ snip ]
> Do you have a handy link to the Posix specification of printf? That
> would be helpful, as I only saw %C and %S in the Mac OS X
> documentation.
These printf format strings are describe in IEEE 1003.1-2008 online:
http://www.opengroup.org/onlinepubs/9699919799/functions/fprintf.html
This is inherited from X/Open and SUS. However, these are not ISO standards
as far as I can tell, and pinning the definition to an ISO standard is far
more preferable than pinning it to an X/Open spec.
> > The (tick) to introduce thousands grouping looks like low-hanging
> > fruit and should be easy to implement.
>
> I was unaware of the ` (tick) grouping.
Well, it's an apostrophe. It's also part of Posix.
> > The %n$ (positional) version is a bit more of a challenge.
>
> Positional arguments are already implemented.
A-ha! clang::analyze_format_string::ParseArgPosition. Sorted. :-)
> > (1) Is anybody other than me supportive of adding this feature to
> Clang?
>
> Specifically, what are you referring to by "this feature"?
As I have source code that uses Posix formats, specifically the ' modifier,
I would like that clang can be told to shut up about *this* particular
extension like it shuts up about %m and the other extensions to ISO C. The
' modifier has probably more right to be there than the 'm' format as it is
defined by a ISO standard rather than a de-facto one. Contentious, I
know... ;-)
> > (2) If so, should Posix format strings be accepted as default?
>
> For these warnings to be useful, I think they should closest match
> reality for the intended target. Specifically, if the target supports
> Posix format strings then I think they should be accepted with no extra
> effort from the developer. If Posix format strings are not accepted,
> then we should issue a warning.
Well, simply accepting %' is a start; doing what you think would mean
retrofitting warnings for %S, %C, %m, and %@ for targets that don't expect
or support them. This seems like it could be wasted effort, you soon see
problems at runtime.
> In many ways this is no different than the various flags we have in
> LangOptions to control the behavior of Sema, particularly when handling
> different dialects of C and C++ (e.g., c99 versus c89, etc.).
>
> > (3) Should there be a front-end flag to select Posix format support?
>
> I think a low-level -cc1 driver option might be appropriate to control
> this behavior (just as we do with other features such as "blocks"), but
> ideally have the logic to decide whether Posix format strings are
> supported to be put into the high-level driver. With the low-level
> driver option, users have the ability to override the default or to
> explicitly invoke the compiler in a specific configuration.
Ok.
> > I would say that the %C, %D, %@, and %m extensions to ISO C are
> > accepted silently by Clang. That is, there is no -W option to turn
> on
> > diagnosis of these extensions, which feels wrong.
>
> I agree that we should have a separate -cc1 flag, but I do think they
> should be silently accepted if the target supports them. Requiring
> that the user specify an extra command line option all the time to
> accept them also feels wrong when that is something the compiler can be
> made aware of in the most common cases.
>
> I'm skeptical that it should be under a separate -W flag. -W flags are
> useful for turning warnings on/off simply by silencing them, but the
> option we are talking about would actually impact how a format string
> is parsed. No -W flag actually influences the compiler in this way,
> but other command line options, e.g -fblocks, actually do change the
> dialect/semantics of the parsed source file.
OK, in that case, is there a suggestion? ;-)
For now, if I cook up a patch to allow %' in all the places where Posix
allows it with some test cases, could we agree to apply that? And then we
can have a little more discussion on how to deal with the way that
"unexpected" formats or modifiers are diagnosed or not?
Rgds,
--
Paul Curtis, Rowley Associates Ltd http://www.rowley.co.uk
SolderCore arriving Winter 2010! http://www.soldercore.com
More information about the cfe-dev
mailing list