Home | History | Annotate | Download | only in Sema
      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