[PATCH] D131057: [Sema] -Wformat: support C23 format specifier %b %B

Elliott Hughes via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 4 10:29:30 PDT 2022

enh added a comment.

In D131057#3697392 <https://reviews.llvm.org/D131057#3697392>, @MaskRay wrote:

> In D131057#3697095 <https://reviews.llvm.org/D131057#3697095>, @dim wrote:
>>> GCC 12 -Wformat -pedantic emits a warning:
>>>   warning: ISO C17 does not support the ‘%b’ gnu_printf format [-Wformat=]
>>> The behavior is not ported (and it's unclear to me how to implement it).
>> If you really want this, I think it can be implemented by looking at `LangOpts::LangStd`.
> Something like `!getLangOpts().C2X` I suppose, but I do not find how to check both `-Wformat` and `-Wpedantic`.
> Also, for the nature of the diagnostic, I think something in TableGen like `def ext_... InGroup<C2x>` would make sense but using a C23/C2x related -W option would deviate from the GCC behavior.
> ISTM adding the diagnostic (even if we do) is not so necessary in this patch.

note that that's not even what we'd want for Android anyway ... availability and behavior on Android is always[1] predicated on the API level, not the C standard. app developers can't avoid dealing with the API level, so we've avoided having an orthogonal versioning concern for them. (this is true in the headers too, not just behavior: on Android you always get the API-level-appropriate _library_ no matter what version of the language you select.)

and, like i said elsewhere, no-one's ever noticed that clang just assumes `%m` is always available. even though _i've_ wanted %b since i was a kid[2], i'm not actually expecting %b will be heavily used in practice. (tbh, i doubt %b will ever be used in `scanf()` outside of tests. as far as i'm concerned only the `printf()` side is actually useful...)


1. the removal of `gets()` is the only exception that springs to mind.
2. even though i know that for weird-ass machines like the PDP series, octal was more useful than it is to the rest of us, i still can't believe %b wasn't in B, let alone C!

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list