16adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// RUN: cp %s %t 26adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// RUN: %clang_cc1 -fsyntax-only -fixit %t 36adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// RUN: %clang_cc1 -E -o - %t | FileCheck %s 46adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 56adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu/* This is a test of the various code modification hints that are 66adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu provided as part of warning or extension diagnostics. Only 76adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu warnings for format strings within the function call will be 86adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu fixed by -fixit. Other format strings will be left alone. */ 96adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 106adb12dd40178ce513b02d44f8048a76801d6331Richard Trieuint printf(char const *, ...); 116adb12dd40178ce513b02d44f8048a76801d6331Richard Trieuint scanf(char const *, ...); 126adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 136adb12dd40178ce513b02d44f8048a76801d6331Richard Trieuvoid pr9751() { 146adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat1[] = "%s"; 156adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf(kFormat1, 5); 166adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf("%s", 5); 176adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 186adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat2[] = "%.3p"; 196adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu void *p; 206adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf(kFormat2, p); 216adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf("%.3p", p); 226adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 236adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat3[] = "%0s"; 246adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf(kFormat3, "a"); 256adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf("%0s", "a"); 266adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 276adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat4[] = "%hhs"; 286adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf(kFormat4, "a"); 296adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf("%hhs", "a"); 306adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 316adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat5[] = "%-0d"; 326adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf(kFormat5, 5); 336adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu printf("%-0d", 5); 346adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 356adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu const char kFormat6[] = "%00d"; 366adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu int *i; 376adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu scanf(kFormat6, i); 386adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu scanf("%00d", i); 396adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu} 406adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 416adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat1[] = "%s"; 426adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf(kFormat1, 5); 436adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf("%d", 5); 446adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 456adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat2[] = "%.3p"; 466adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: void *p; 476adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf(kFormat2, p); 486adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf("%p", p); 496adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 506adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat3[] = "%0s"; 516adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf(kFormat3, "a"); 526adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf("%s", "a"); 536adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 546adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat4[] = "%hhs"; 556adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf(kFormat4, "a"); 566adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf("%s", "a"); 576adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 586adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat5[] = "%-0d"; 596adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf(kFormat5, 5); 606adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: printf("%-d", 5); 616adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu 626adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: const char kFormat6[] = "%00d"; 636adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: int *i; 646adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: scanf(kFormat6, i); 656adb12dd40178ce513b02d44f8048a76801d6331Richard Trieu// CHECK: scanf("%d", i); 66