1*67e74705SXin Li // RUN: cp %s %t
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fixit %t
3*67e74705SXin Li // RUN: %clang_cc1 -E -o - %t | FileCheck %s
4*67e74705SXin Li
5*67e74705SXin Li /* This is a test of the various code modification hints that are
6*67e74705SXin Li provided as part of warning or extension diagnostics. Only
7*67e74705SXin Li warnings for format strings within the function call will be
8*67e74705SXin Li fixed by -fixit. Other format strings will be left alone. */
9*67e74705SXin Li
10*67e74705SXin Li int printf(char const *, ...);
11*67e74705SXin Li int scanf(char const *, ...);
12*67e74705SXin Li
pr9751()13*67e74705SXin Li void pr9751() {
14*67e74705SXin Li const char kFormat1[] = "%s";
15*67e74705SXin Li printf(kFormat1, 5);
16*67e74705SXin Li printf("%s", 5);
17*67e74705SXin Li
18*67e74705SXin Li const char kFormat2[] = "%.3p";
19*67e74705SXin Li void *p;
20*67e74705SXin Li printf(kFormat2, p);
21*67e74705SXin Li printf("%.3p", p);
22*67e74705SXin Li
23*67e74705SXin Li const char kFormat3[] = "%0s";
24*67e74705SXin Li printf(kFormat3, "a");
25*67e74705SXin Li printf("%0s", "a");
26*67e74705SXin Li
27*67e74705SXin Li const char kFormat4[] = "%hhs";
28*67e74705SXin Li printf(kFormat4, "a");
29*67e74705SXin Li printf("%hhs", "a");
30*67e74705SXin Li
31*67e74705SXin Li const char kFormat5[] = "%-0d";
32*67e74705SXin Li printf(kFormat5, 5);
33*67e74705SXin Li printf("%-0d", 5);
34*67e74705SXin Li
35*67e74705SXin Li const char kFormat6[] = "%00d";
36*67e74705SXin Li int *i;
37*67e74705SXin Li scanf(kFormat6, i);
38*67e74705SXin Li scanf("%00d", i);
39*67e74705SXin Li }
40*67e74705SXin Li
41*67e74705SXin Li // CHECK: const char kFormat1[] = "%s";
42*67e74705SXin Li // CHECK: printf(kFormat1, 5);
43*67e74705SXin Li // CHECK: printf("%d", 5);
44*67e74705SXin Li
45*67e74705SXin Li // CHECK: const char kFormat2[] = "%.3p";
46*67e74705SXin Li // CHECK: void *p;
47*67e74705SXin Li // CHECK: printf(kFormat2, p);
48*67e74705SXin Li // CHECK: printf("%p", p);
49*67e74705SXin Li
50*67e74705SXin Li // CHECK: const char kFormat3[] = "%0s";
51*67e74705SXin Li // CHECK: printf(kFormat3, "a");
52*67e74705SXin Li // CHECK: printf("%s", "a");
53*67e74705SXin Li
54*67e74705SXin Li // CHECK: const char kFormat4[] = "%hhs";
55*67e74705SXin Li // CHECK: printf(kFormat4, "a");
56*67e74705SXin Li // CHECK: printf("%s", "a");
57*67e74705SXin Li
58*67e74705SXin Li // CHECK: const char kFormat5[] = "%-0d";
59*67e74705SXin Li // CHECK: printf(kFormat5, 5);
60*67e74705SXin Li // CHECK: printf("%-d", 5);
61*67e74705SXin Li
62*67e74705SXin Li // CHECK: const char kFormat6[] = "%00d";
63*67e74705SXin Li // CHECK: int *i;
64*67e74705SXin Li // CHECK: scanf(kFormat6, i);
65*67e74705SXin Li // CHECK: scanf("%d", i);
66