================ @@ -286,7 +286,33 @@ clang::analyze_format_string::ParseLengthModifier(FormatSpecifier &FS, lmKind = LengthModifier::AsInt3264; break; case 'w': - lmKind = LengthModifier::AsWide; ++I; break; + ++I; + if (I == E) return false; + if (*I == 'f') { + lmKind = LengthModifier::AsWideFast; + ++I; + } else { + lmKind = LengthModifier::AsWide; + } + + if (I == E) return false; + int s = 0; + while (unsigned(*I - '0') <= 9) { + s = 10 * s + unsigned(*I - '0'); + ++I; + } + + // s == 0 is MSVCRT case, like l but only for c, C, s, S, or Z on windows + // s != 0 for b, d, i, o, u, x, or X when a size followed(like 8, 16, 32 or 64) + if (s != 0) { + std::set<int> supported_list {8, 16, 32, 64}; ---------------- AaronBallman wrote:
I think this list is not quite right because we handle some odd sizes as well: https://github.com/llvm/llvm-project/blob/main/clang/lib/Headers/stdint.h#L124 That said, I'm not certain how we would find out which odd sizes are supported; it depends on Clang as well as whatever C standard library is being dispatched to. So I think we should probably err on the side of specifying all the bit-widths we specify in stdint.h. https://github.com/llvm/llvm-project/pull/71771 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits