[cfe-dev] [PATCH] Let __attribute__((format(…))) accept OFStrings

Jonathan Schleifer js at webkeks.org
Wed Nov 27 07:34:37 PST 2013


Am 27.11.2013 um 10:49 schrieb David Chisnall <David.Chisnall at cl.cam.ac.uk>:

> I would love to see the printf attribute code generalised so that we could have a pragma to declare a formatting character and the type it expected.  For the FreeBSD kernel, we have a set of printf extensions for printing complex data structures, and a lot of modern libc implementations provide a mechanism for registering handlers for format strings.  It would be great if all of these could be supported, without hard-coding them.

I have to agree, a #pragma would be even better. I have to admit, I only thought about an option and not a pragma and using options, this would have become very ugly. But pragmas actually are a nice solution.

But there are a few questions left:
Will the pragma allow it for all format specifier types? Will it only add them to a specific format specifier type?

I would suggest to have several pragmas, e.g.:
#pragma clang format type(formatStringType, type)
#pragma clang format add(formatStringType, formatSpecifier, type)

This would solve both problems for me: Adding OFString as a valid type for a format string and adding the specifiers. So I could use this:

#pragma clang format type(__OFString__, OFString)
#pragma clang format add(__OFString__, "C", of_unichar_t)
#pragma clang format add(__OFString__, "S", const of_unichar_t)

The hard part would be that the format specifier actually needs to be parsed so that something like this would also be possible:
#pragma clang format add(printf, "llc", char32_t)

Any thoughts about this? I think this would be great and better than hardcoding it. I think this would be a solution to make everybody happy. I'd start writing a patch myself right away, but I think I am not enough into the internals of Clang yet ;). I'll see what I can do, but it might take a while due to limited time. If someone else also likes this, feel free to go ahead and do it, you'll most likely have something useful before I do ;).

Another benefit of this approach: Getting rid of all non-standard specifiers in Clang. glibc and Apple could add their extensions in their system headers using those pragmas then.

--
Jonathan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131127/2010b21d/attachment.sig>


More information about the cfe-dev mailing list