llvm-capstone/clang/test/Sema/format-strings-no-fixit.c
Richard Trieu 03cf7b70e0 Fix for PR9751 to change the behavior of -Wformat warnings. If the format
string is part of the function call, then there is no difference.  If the
format string is not, the warning will point to the call site and a note
will point to where the format string is.

Fix-it hints for strings are moved to the note if a note is emitted.  This will
prevent changes to format strings that may be used in multiple places.

llvm-svn: 143168
2011-10-28 00:41:25 +00:00

66 lines
1.6 KiB
C

// RUN: cp %s %t
// RUN: %clang_cc1 -fsyntax-only -fixit %t
// RUN: %clang_cc1 -E -o - %t | FileCheck %s
/* This is a test of the various code modification hints that are
provided as part of warning or extension diagnostics. Only
warnings for format strings within the function call will be
fixed by -fixit. Other format strings will be left alone. */
int printf(char const *, ...);
int scanf(char const *, ...);
void pr9751() {
const char kFormat1[] = "%s";
printf(kFormat1, 5);
printf("%s", 5);
const char kFormat2[] = "%.3p";
void *p;
printf(kFormat2, p);
printf("%.3p", p);
const char kFormat3[] = "%0s";
printf(kFormat3, "a");
printf("%0s", "a");
const char kFormat4[] = "%hhs";
printf(kFormat4, "a");
printf("%hhs", "a");
const char kFormat5[] = "%-0d";
printf(kFormat5, 5);
printf("%-0d", 5);
const char kFormat6[] = "%00d";
int *i;
scanf(kFormat6, i);
scanf("%00d", i);
}
// CHECK: const char kFormat1[] = "%s";
// CHECK: printf(kFormat1, 5);
// CHECK: printf("%d", 5);
// CHECK: const char kFormat2[] = "%.3p";
// CHECK: void *p;
// CHECK: printf(kFormat2, p);
// CHECK: printf("%p", p);
// CHECK: const char kFormat3[] = "%0s";
// CHECK: printf(kFormat3, "a");
// CHECK: printf("%s", "a");
// CHECK: const char kFormat4[] = "%hhs";
// CHECK: printf(kFormat4, "a");
// CHECK: printf("%s", "a");
// CHECK: const char kFormat5[] = "%-0d";
// CHECK: printf(kFormat5, 5);
// CHECK: printf("%-d", 5);
// CHECK: const char kFormat6[] = "%00d";
// CHECK: int *i;
// CHECK: scanf(kFormat6, i);
// CHECK: scanf("%d", i);