[PATCH] D148779: [Sema] -Wformat: recognize %lb for the ``printf``/``scanf`` family of functions
Fangrui Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 20 09:32:24 PDT 2023
MaskRay updated this revision to Diff 515357.
MaskRay retitled this revision from "[Sema] Fix spurious warning for printf("%lb", (long)10)" to "[Sema] -Wformat: recognize %lb for the ``printf``/``scanf`` family of functions".
MaskRay edited the summary of this revision.
MaskRay added a comment.
Change the subject to be clearer.
Add a release note.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148779/new/
https://reviews.llvm.org/D148779
Files:
clang/docs/ReleaseNotes.rst
clang/lib/AST/FormatString.cpp
clang/test/Sema/format-strings-fixit.c
clang/test/Sema/format-strings.c
Index: clang/test/Sema/format-strings.c
===================================================================
--- clang/test/Sema/format-strings.c
+++ clang/test/Sema/format-strings.c
@@ -304,6 +304,7 @@
printf("%qp", (void *)0); // expected-warning{{length modifier 'q' results in undefined behavior or no effect with 'p' conversion specifier}}
printf("hhX %hhX", (unsigned char)10); // no-warning
printf("llX %llX", (long long) 10); // no-warning
+ printf("%lb %lB", (long) 10, (long) 10); // no-warning
printf("%llb %llB", (long long) 10, (long long) 10); // no-warning
// This is fine, because there is an implicit conversion to an int.
printf("%d", (unsigned char) 10); // no-warning
Index: clang/test/Sema/format-strings-fixit.c
===================================================================
--- clang/test/Sema/format-strings-fixit.c
+++ clang/test/Sema/format-strings-fixit.c
@@ -22,6 +22,7 @@
printf("abc%0f", "testing testing 123");
printf("%u", (long) -12);
printf("%b", (long) -13);
+ printf("%d", (long) -14);
printf("%p", 123);
printf("%c\n", "x");
printf("%c\n", 1.23);
@@ -162,6 +163,7 @@
// Preserve the original formatting.
scanf("%b", &longVar);
+ scanf("%d", &longVar);
scanf("%o", &longVar);
scanf("%u", &longVar);
scanf("%x", &longVar);
@@ -181,7 +183,8 @@
// CHECK: printf("%d", (int) 123);
// CHECK: printf("abc%s", "testing testing 123");
// CHECK: printf("%ld", (long) -12);
-// CHECK: printf("%ld", (long) -13);
+// CHECK: printf("%lb", (long) -13);
+// CHECK: printf("%ld", (long) -14);
// CHECK: printf("%d", 123);
// CHECK: printf("%s\n", "x");
// CHECK: printf("%f\n", 1.23);
@@ -249,6 +252,7 @@
// CHECK: scanf("%ju", (my_uintmax_type*)&uIntmaxVar);
// CHECK: scanf("%td", (my_ptrdiff_type*)&ptrdiffVar);
// CHECK: scanf("%d", (my_int_type*)&intVar);
+// CHECK: scanf("%lb", &longVar);
// CHECK: scanf("%ld", &longVar);
// CHECK: scanf("%lo", &longVar);
// CHECK: scanf("%lu", &longVar);
Index: clang/lib/AST/FormatString.cpp
===================================================================
--- clang/lib/AST/FormatString.cpp
+++ clang/lib/AST/FormatString.cpp
@@ -848,6 +848,8 @@
}
switch (CS.getKind()) {
+ case ConversionSpecifier::bArg:
+ case ConversionSpecifier::BArg:
case ConversionSpecifier::dArg:
case ConversionSpecifier::DArg:
case ConversionSpecifier::iArg:
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -228,6 +228,9 @@
- Clang's "static assertion failed" diagnostic now points to the static assertion
expression instead of pointing to the ``static_assert`` token.
(`#61951 <https://github.com/llvm/llvm-project/issues/61951>`_)
+- ``-Wformat`` now recognizes ``%lb`` for the ``printf``/``scanf`` family of
+ functions.
+ (`#62247: <https://github.com/llvm/llvm-project/issues/62247>`_).
Bug Fixes in This Version
-------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148779.515357.patch
Type: text/x-patch
Size: 3054 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230420/0f800b5e/attachment-0001.bin>
More information about the cfe-commits
mailing list