brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 5e37ec7 Raw
270 lines · c
1// RUN: cp %s %t2// RUN: %clang_cc1 -pedantic -Wall -fixit %t3// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror %t4// RUN: %clang_cc1 -E -o - %t | FileCheck %s5 6/* This is a test of the various code modification hints that are7   provided as part of warning or extension diagnostics. All of the8   warnings will be fixed by -fixit, and the resulting file should9   compile cleanly with -Werror -pedantic. */10 11int printf(char const *, ...);12 13typedef __SIZE_TYPE__ size_t;14typedef __INTMAX_TYPE__ intmax_t;15typedef __UINTMAX_TYPE__ uintmax_t;16typedef __PTRDIFF_TYPE__ ptrdiff_t;17typedef __WCHAR_TYPE__ wchar_t;18 19void test(void) {20  // Basic types21  printf("%s", (int) 123);22  printf("abc%0f", "testing testing 123");23  printf("%u", (long) -12);24  printf("%b", (long) -13);25  printf("%d", (long) -14);26  printf("%p", 123);27  printf("%c\n", "x");28  printf("%c\n", 1.23);29 30  // Larger types31  printf("%+.2d", (unsigned long long) 123456);32  printf("%1d", (long double) 1.23);33 34  // Flag handling35  printf("%0+s", (unsigned) 31337); // 0 flag should stay36  printf("%#p", (void *) 0);37  printf("% +f", 1.23); // + flag should stay38  printf("%0-f", 1.23); // - flag should stay39 40  // Positional arguments41#pragma clang diagnostic push // Don't warn about using positional arguments.42#pragma clang diagnostic ignored "-Wformat-non-iso"43  printf("%1$f:%2$.*3$f:%4$.*3$f\n", 1, 2, 3, 4);44#pragma clang diagnostic pop45 46  // Precision47  printf("%10.5d", 1l); // (bug 7394)48  printf("%.2c", 'a');49 50  // Ignored flags51  printf("%0-f", 1.23);52 53  // Bad length modifiers54  printf("%hhs", "foo");55#pragma clang diagnostic push // Don't warn about using positional arguments.56#pragma clang diagnostic ignored "-Wformat-non-iso"57  printf("%1$zp", (void *)0);58#pragma clang diagnostic pop59 60  // Preserve the original formatting for unsigned integers.61  unsigned long val = 42;62  printf("%X", val);63 64  // size_t, etc.65  printf("%f", (size_t) 42);66  printf("%f", (intmax_t) 42);67  printf("%f", (uintmax_t) 42);68  printf("%f", (ptrdiff_t) 42);69 70  // Look beyond the first typedef.71  typedef size_t my_size_type;72  typedef intmax_t my_intmax_type;73  typedef uintmax_t my_uintmax_type;74  typedef ptrdiff_t my_ptrdiff_type;75  typedef int my_int_type;76  printf("%f", (my_size_type) 42);77  printf("%f", (my_intmax_type) 42);78  printf("%f", (my_uintmax_type) 42);79  printf("%f", (my_ptrdiff_type) 42);80  printf("%f", (my_int_type) 42);81 82  // string83  printf("%ld", "foo");84 85  // Preserve the original choice of conversion specifier.86  printf("%o", (long) 42);87  printf("%u", (long) 42);88  printf("%x", (long) 42);89  printf("%X", (long) 42);90  printf("%i", (unsigned long) 42);91  printf("%d", (unsigned long) 42);92  printf("%F", (long double) 42);93  printf("%e", (long double) 42);94  printf("%E", (long double) 42);95  printf("%g", (long double) 42);96  printf("%G", (long double) 42);97  printf("%a", (long double) 42);98  printf("%A", (long double) 42);99}100 101int scanf(char const *, ...);102 103void test2(int intSAParm[static 2]) {104  char str[100];105  char *vstr = "abc";106  short shortVar;107  unsigned short uShortVar;108  int intVar;109  int intAVar[2];110  unsigned uIntVar;111  float floatVar;112  double doubleVar;113  long double longDoubleVar;114  long longVar;115  unsigned long uLongVar;116  long long longLongVar;117  unsigned long long uLongLongVar;118  size_t sizeVar;119  intmax_t intmaxVar;120  uintmax_t uIntmaxVar;121  ptrdiff_t ptrdiffVar;122  enum {A, B, C} enumVar;123 124  // Some string types.125  scanf("%lf", str);126  scanf("%lf", vstr);127  scanf("%ls", str);128  scanf("%ls", str);129 130  // Some integer types.131  scanf("%f", &shortVar);132  scanf("%f", &uShortVar);133  scanf("%p", &intVar);134  scanf("%f", intAVar);135  scanf("%f", intSAParm);136  scanf("%Lf", &uIntVar);137  scanf("%ld", &floatVar);138  scanf("%f", &doubleVar);139  scanf("%d", &longDoubleVar);140  scanf("%f", &longVar);141  scanf("%f", &uLongVar);142  scanf("%f", &longLongVar);143  scanf("%f", &uLongLongVar);144  scanf("%d", &enumVar); // FIXME: We ought to fix specifiers for enums.145 146  // Some named ints.147  scanf("%f", &sizeVar);148  scanf("%f", &intmaxVar);149  scanf("%f", &uIntmaxVar);150  scanf("%f", &ptrdiffVar);151 152  // Look beyond the first typedef for named integer types.153  typedef size_t my_size_type;154  typedef intmax_t my_intmax_type;155  typedef uintmax_t my_uintmax_type;156  typedef ptrdiff_t my_ptrdiff_type;157  typedef int my_int_type;158  scanf("%f", (my_size_type*)&sizeVar);159  scanf("%f", (my_intmax_type*)&intmaxVar);160  scanf("%f", (my_uintmax_type*)&uIntmaxVar);161  scanf("%f", (my_ptrdiff_type*)&ptrdiffVar);162  scanf("%f", (my_int_type*)&intVar);163 164  // Preserve the original formatting.165  scanf("%b", &longVar);166  scanf("%d", &longVar);167  scanf("%o", &longVar);168  scanf("%u", &longVar);169  scanf("%x", &longVar);170  scanf("%X", &longVar);171  scanf("%i", &uLongVar);172  scanf("%d", &uLongVar);173  scanf("%F", &longDoubleVar);174  scanf("%e", &longDoubleVar);175  scanf("%E", &longDoubleVar);176  scanf("%g", &longDoubleVar);177  scanf("%G", &longDoubleVar);178  scanf("%a", &longDoubleVar);179  scanf("%A", &longDoubleVar);180}181 182// Validate the fixes.183// CHECK: printf("%d", (int) 123);184// CHECK: printf("abc%s", "testing testing 123");185// CHECK: printf("%ld", (long) -12);186// CHECK: printf("%lb", (long) -13);187// CHECK: printf("%ld", (long) -14);188// CHECK: printf("%d", 123);189// CHECK: printf("%s\n", "x");190// CHECK: printf("%f\n", 1.23);191// CHECK: printf("%+.2lld", (unsigned long long) 123456);192// CHECK: printf("%1Lf", (long double) 1.23);193// CHECK: printf("%0u", (unsigned) 31337);194// CHECK: printf("%p", (void *) 0);195// CHECK: printf("%+f", 1.23);196// CHECK: printf("%-f", 1.23);197// CHECK: printf("%1$d:%2$.*3$d:%4$.*3$d\n", 1, 2, 3, 4);198// CHECK: printf("%10.5ld", 1l);199// CHECK: printf("%c", 'a');200// CHECK: printf("%-f", 1.23);201// CHECK: printf("%s", "foo");202// CHECK: printf("%1$p", (void *)0);203// CHECK: printf("%lX", val);204// CHECK: printf("%zu", (size_t) 42);205// CHECK: printf("%jd", (intmax_t) 42);206// CHECK: printf("%ju", (uintmax_t) 42);207// CHECK: printf("%td", (ptrdiff_t) 42);208// CHECK: printf("%zu", (my_size_type) 42);209// CHECK: printf("%jd", (my_intmax_type) 42);210// CHECK: printf("%ju", (my_uintmax_type) 42);211// CHECK: printf("%td", (my_ptrdiff_type) 42);212// CHECK: printf("%d", (my_int_type) 42);213// CHECK: printf("%s", "foo");214// CHECK: printf("%lo", (long) 42);215// CHECK: printf("%ld", (long) 42);216// CHECK: printf("%lx", (long) 42);217// CHECK: printf("%lX", (long) 42);218// CHECK: printf("%lu", (unsigned long) 42);219// CHECK: printf("%lu", (unsigned long) 42);220// CHECK: printf("%LF", (long double) 42);221// CHECK: printf("%Le", (long double) 42);222// CHECK: printf("%LE", (long double) 42);223// CHECK: printf("%Lg", (long double) 42);224// CHECK: printf("%LG", (long double) 42);225// CHECK: printf("%La", (long double) 42);226// CHECK: printf("%LA", (long double) 42);227 228// CHECK: scanf("%99s", str);229// CHECK: scanf("%s", vstr);230// CHECK: scanf("%99s", str);231// CHECK: scanf("%99s", str);232// CHECK: scanf("%hd", &shortVar);233// CHECK: scanf("%hu", &uShortVar);234// CHECK: scanf("%d", &intVar);235// CHECK: scanf("%d", intAVar);236// CHECK: scanf("%d", intSAParm);237// CHECK: scanf("%u", &uIntVar);238// CHECK: scanf("%f", &floatVar);239// CHECK: scanf("%lf", &doubleVar);240// CHECK: scanf("%Lf", &longDoubleVar);241// CHECK: scanf("%ld", &longVar);242// CHECK: scanf("%lu", &uLongVar);243// CHECK: scanf("%lld", &longLongVar);244// CHECK: scanf("%llu", &uLongLongVar);245// CHECK: scanf("%d", &enumVar);246// CHECK: scanf("%zu", &sizeVar);247// CHECK: scanf("%jd", &intmaxVar);248// CHECK: scanf("%ju", &uIntmaxVar);249// CHECK: scanf("%td", &ptrdiffVar);250// CHECK: scanf("%zu", (my_size_type*)&sizeVar);251// CHECK: scanf("%jd", (my_intmax_type*)&intmaxVar);252// CHECK: scanf("%ju", (my_uintmax_type*)&uIntmaxVar);253// CHECK: scanf("%td", (my_ptrdiff_type*)&ptrdiffVar);254// CHECK: scanf("%d", (my_int_type*)&intVar);255// CHECK: scanf("%lb", &longVar);256// CHECK: scanf("%ld", &longVar);257// CHECK: scanf("%lo", &longVar);258// CHECK: scanf("%lu", &longVar);259// CHECK: scanf("%lx", &longVar);260// CHECK: scanf("%lX", &longVar);261// CHECK: scanf("%li", &uLongVar);262// CHECK: scanf("%ld", &uLongVar);263// CHECK: scanf("%LF", &longDoubleVar);264// CHECK: scanf("%Le", &longDoubleVar);265// CHECK: scanf("%LE", &longDoubleVar);266// CHECK: scanf("%Lg", &longDoubleVar);267// CHECK: scanf("%LG", &longDoubleVar);268// CHECK: scanf("%La", &longDoubleVar);269// CHECK: scanf("%LA", &longDoubleVar);270