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