Move one more diagnostic into the new -Wformat-pedantic group.
authorDaniel Jasper <djasper@google.com>
Wed, 4 Mar 2015 14:18:20 +0000 (14:18 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 4 Mar 2015 14:18:20 +0000 (14:18 +0000)
This was apparently overlooked in r231211.

llvm-svn: 231242

clang/lib/Sema/SemaChecking.cpp
clang/test/SemaCXX/format-strings-0x-nopedantic.cpp [new file with mode: 0644]

index 6b569b6..884bd7d 100644 (file)
@@ -3768,16 +3768,18 @@ CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,
     CharSourceRange SpecRange = getSpecifierRange(StartSpecifier, SpecifierLen);
 
     if (IntendedTy == ExprTy && !ShouldNotPrintDirectly) {
+      unsigned diag = diag::warn_format_conversion_argument_type_mismatch;
+      if (match == analyze_format_string::ArgType::NoMatchPedantic) {
+        diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;
+      }
       // In this case, the specifier is wrong and should be changed to match
       // the argument.
-      EmitFormatDiagnostic(
-        S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
-          << AT.getRepresentativeTypeName(S.Context) << IntendedTy << IsEnum
-          << E->getSourceRange(),
-        E->getLocStart(),
-        /*IsStringLocation*/false,
-        SpecRange,
-        FixItHint::CreateReplacement(SpecRange, os.str()));
+      EmitFormatDiagnostic(S.PDiag(diag)
+                               << AT.getRepresentativeTypeName(S.Context)
+                               << IntendedTy << IsEnum << E->getSourceRange(),
+                           E->getLocStart(),
+                           /*IsStringLocation*/ false, SpecRange,
+                           FixItHint::CreateReplacement(SpecRange, os.str()));
 
     } else {
       // The canonical type for formatting this value is different from the
diff --git a/clang/test/SemaCXX/format-strings-0x-nopedantic.cpp b/clang/test/SemaCXX/format-strings-0x-nopedantic.cpp
new file mode 100644 (file)
index 0000000..62e7ade
--- /dev/null
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wformat -std=c++11 %s
+// expected-no-diagnostics
+extern "C" {
+extern int scanf(const char *restrict, ...);
+extern int printf(const char *restrict, ...);
+}
+
+void f(char *c) {
+  printf("%p", c);
+}