From 861da5bd520fe2875bf41692addc5ff4d564ccae Mon Sep 17 00:00:00 2001 From: Jan Korous Date: Wed, 16 Sep 2020 09:52:51 -0700 Subject: [PATCH 1/2] [clang] Selectively ena/disa-ble format-insufficient-args warning Differential Revision: https://reviews.llvm.org/D87176 --- clang/include/clang/Basic/DiagnosticGroups.td | 4 +++- clang/include/clang/Basic/DiagnosticSemaKinds.td | 2 +- clang/test/Misc/warning-wall.c | 1 + clang/test/Sema/warn-printf-insufficient-data-args.c | 11 +++++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 clang/test/Sema/warn-printf-insufficient-data-args.c diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 5e0031335e1ce..6dc2e51b434ca 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -234,6 +234,7 @@ def ExtraSemi : DiagGroup<"extra-semi", [CXX98CompatExtraSemi, def GNUFlexibleArrayInitializer : DiagGroup<"gnu-flexible-array-initializer">; def GNUFlexibleArrayUnionMember : DiagGroup<"gnu-flexible-array-union-member">; def GNUFoldingConstant : DiagGroup<"gnu-folding-constant">; +def FormatInsufficientArgs : DiagGroup<"format-insufficient-args">; def FormatExtraArgs : DiagGroup<"format-extra-args">; def FormatZeroLength : DiagGroup<"format-zero-length">; @@ -840,7 +841,8 @@ def FormatPedantic : DiagGroup<"format-pedantic">; def FormatTypeConfusion : DiagGroup<"format-type-confusion">; def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull, - FormatSecurity, FormatY2K, FormatInvalidSpecifier]>, + FormatSecurity, FormatY2K, FormatInvalidSpecifier, + FormatInsufficientArgs]>, DiagCategory<"Format String Issue">; def FormatNonLiteral : DiagGroup<"format-nonliteral">; def Format2 : DiagGroup<"format=2", diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index c8cc44b4feb35..685a735bd4518 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -8945,7 +8945,7 @@ def note_array_declared_here : Note< "array %0 declared here">; def warn_printf_insufficient_data_args : Warning< - "more '%%' conversions than data arguments">, InGroup; + "more '%%' conversions than data arguments">, InGroup; def warn_printf_data_arg_not_used : Warning< "data argument not used by format string">, InGroup; def warn_format_invalid_conversion : Warning< diff --git a/clang/test/Misc/warning-wall.c b/clang/test/Misc/warning-wall.c index c63d4beecff04..9975323f70286 100644 --- a/clang/test/Misc/warning-wall.c +++ b/clang/test/Misc/warning-wall.c @@ -9,6 +9,7 @@ CHECK-NEXT: -Wdelete-non-virtual-dtor CHECK-NEXT: -Wdelete-non-abstract-non-virtual-dtor CHECK-NEXT: -Wdelete-abstract-non-virtual-dtor CHECK-NEXT: -Wformat +CHECK-NEXT: -Wformat-insufficient-args CHECK-NEXT: -Wformat-extra-args CHECK-NEXT: -Wformat-zero-length CHECK-NEXT: -Wnonnull diff --git a/clang/test/Sema/warn-printf-insufficient-data-args.c b/clang/test/Sema/warn-printf-insufficient-data-args.c new file mode 100644 index 0000000000000..a8de7118e8b1f --- /dev/null +++ b/clang/test/Sema/warn-printf-insufficient-data-args.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -verify=WARNING-ON %s +// RUN: %clang_cc1 -fsyntax-only -Wno-format-insufficient-args -verify=WARNING-OFF %s + + +int printf(const char * format, ...); + +int main(void) { + int patatino = 42; + printf("%i %i", patatino); // WARNING-ON-warning {{more '%' conversions than data arguments}} + // WARNING-OFF-no-diagnostics +} From b3b219d6718716e8676c8876e5e87f34339c6cd3 Mon Sep 17 00:00:00 2001 From: Jan Korous Date: Mon, 28 Sep 2020 17:19:31 -0700 Subject: [PATCH 2/2] [clang] Update warning-wall.c test Follow-up to 1e86d637eb4f: [clang] Selectively ena/disa-ble format-insufficient-args warning --- clang/test/Misc/warning-wall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Misc/warning-wall.c b/clang/test/Misc/warning-wall.c index 9975323f70286..ac2b124e3312f 100644 --- a/clang/test/Misc/warning-wall.c +++ b/clang/test/Misc/warning-wall.c @@ -9,13 +9,13 @@ CHECK-NEXT: -Wdelete-non-virtual-dtor CHECK-NEXT: -Wdelete-non-abstract-non-virtual-dtor CHECK-NEXT: -Wdelete-abstract-non-virtual-dtor CHECK-NEXT: -Wformat -CHECK-NEXT: -Wformat-insufficient-args CHECK-NEXT: -Wformat-extra-args CHECK-NEXT: -Wformat-zero-length CHECK-NEXT: -Wnonnull CHECK-NEXT: -Wformat-security CHECK-NEXT: -Wformat-y2k CHECK-NEXT: -Wformat-invalid-specifier +CHECK-NEXT: -Wformat-insufficient-args CHECK-NEXT: -Wfor-loop-analysis CHECK-NEXT: -Wframe-address CHECK-NEXT: -Wimplicit