diff options
author | Hans Wennborg <hans@hanshq.net> | 2012-02-15 09:59:46 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2012-02-15 09:59:46 +0000 |
commit | d99d688358d9383b4cedb824d6ddfe36e2aa4a6d (patch) | |
tree | 6082e708fb78bc39e9fcdec2d78ceefecc0b88e7 /clang/test/Sema/format-strings-fixit.c | |
parent | f12cea425709e39992e4c3464fbca8654d11ce5a (diff) | |
download | bcm5719-llvm-d99d688358d9383b4cedb824d6ddfe36e2aa4a6d.tar.gz bcm5719-llvm-d99d688358d9383b4cedb824d6ddfe36e2aa4a6d.zip |
Make -Wformat fix-its preserve original conversion specifiers.
This commit makes PrintfSpecifier::fixType() and ScanfSpecifier::fixType()
only fix a conversion specification enough that Clang wouldn't warn about it,
as opposed to always changing it to use the "canonical" conversion specifier.
(PR11975)
This preserves the user's choice of conversion specifier in cases like:
printf("%a", (long double)1);
where we previously suggested "%Lf", we now suggest "%La"
printf("%x", (long)1);
where we previously suggested "%ld", we now suggest "%lx".
llvm-svn: 150578
Diffstat (limited to 'clang/test/Sema/format-strings-fixit.c')
-rw-r--r-- | clang/test/Sema/format-strings-fixit.c | 70 |
1 files changed, 59 insertions, 11 deletions
diff --git a/clang/test/Sema/format-strings-fixit.c b/clang/test/Sema/format-strings-fixit.c index 4fb6d75d76d..80b1be05787 100644 --- a/clang/test/Sema/format-strings-fixit.c +++ b/clang/test/Sema/format-strings-fixit.c @@ -48,7 +48,7 @@ void test() { printf("%hhs", "foo"); printf("%1$zp", (void *)0); - // Perserve the original formatting for unsigned integers. + // Preserve the original formatting for unsigned integers. unsigned long val = 42; printf("%X", val); @@ -60,6 +60,21 @@ void test() { // string printf("%ld", "foo"); + + // Preserve the original choice of conversion specifier. + printf("%o", (long) 42); + printf("%u", (long) 42); + printf("%x", (long) 42); + printf("%X", (long) 42); + printf("%i", (unsigned long) 42); + printf("%d", (unsigned long) 42); + printf("%F", (long double) 42); + printf("%e", (long double) 42); + printf("%E", (long double) 42); + printf("%g", (long double) 42); + printf("%G", (long double) 42); + printf("%a", (long double) 42); + printf("%A", (long double) 42); } int scanf(char const *, ...); @@ -101,20 +116,30 @@ void test2() { scanf("%f", &uIntmaxVar); scanf("%f", &ptrdiffVar); - // Perserve the original formatting for unsigned integers. - scanf("%o", &uLongVar); - scanf("%x", &uLongVar); - scanf("%X", &uLongVar); + // Preserve the original formatting. + scanf("%o", &longVar); + scanf("%u", &longVar); + scanf("%x", &longVar); + scanf("%X", &longVar); + scanf("%i", &uLongVar); + scanf("%d", &uLongVar); + scanf("%F", &longDoubleVar); + scanf("%e", &longDoubleVar); + scanf("%E", &longDoubleVar); + scanf("%g", &longDoubleVar); + scanf("%G", &longDoubleVar); + scanf("%a", &longDoubleVar); + scanf("%A", &longDoubleVar); } -// Validate the fixes... +// Validate the fixes. // CHECK: printf("%d", (int) 123); // CHECK: printf("abc%s", "testing testing 123"); -// CHECK: printf("%ld", (long) -12); +// CHECK: printf("%lu", (long) -12); // CHECK: printf("%d", 123); // CHECK: printf("%s\n", "x"); // CHECK: printf("%f\n", 1.23); -// CHECK: printf("%.2llu", (unsigned long long) 123456); +// CHECK: printf("%+.2lld", (unsigned long long) 123456); // CHECK: printf("%1Lf", (long double) 1.23); // CHECK: printf("%0u", (unsigned) 31337); // CHECK: printf("%p", (void *) 0); @@ -132,6 +157,19 @@ void test2() { // CHECK: printf("%ju", (uintmax_t) 42); // CHECK: printf("%td", (ptrdiff_t) 42); // CHECK: printf("%s", "foo"); +// CHECK: printf("%lo", (long) 42); +// CHECK: printf("%lu", (long) 42); +// CHECK: printf("%lx", (long) 42); +// CHECK: printf("%lX", (long) 42); +// CHECK: printf("%li", (unsigned long) 42); +// CHECK: printf("%ld", (unsigned long) 42); +// CHECK: printf("%LF", (long double) 42); +// CHECK: printf("%Le", (long double) 42); +// CHECK: printf("%LE", (long double) 42); +// CHECK: printf("%Lg", (long double) 42); +// CHECK: printf("%LG", (long double) 42); +// CHECK: printf("%La", (long double) 42); +// CHECK: printf("%LA", (long double) 42); // CHECK: scanf("%s", str); // CHECK: scanf("%hd", &shortVar); @@ -149,6 +187,16 @@ void test2() { // CHECK: scanf("%jd", &intmaxVar); // CHECK: scanf("%ju", &uIntmaxVar); // CHECK: scanf("%td", &ptrdiffVar); -// CHECK: scanf("%lo", &uLongVar); -// CHECK: scanf("%lx", &uLongVar); -// CHECK: scanf("%lX", &uLongVar); +// CHECK: scanf("%lo", &longVar); +// CHECK: scanf("%lu", &longVar); +// CHECK: scanf("%lx", &longVar); +// CHECK: scanf("%lX", &longVar); +// CHECK: scanf("%li", &uLongVar); +// CHECK: scanf("%ld", &uLongVar); +// CHECK: scanf("%LF", &longDoubleVar); +// CHECK: scanf("%Le", &longDoubleVar); +// CHECK: scanf("%LE", &longDoubleVar); +// CHECK: scanf("%Lg", &longDoubleVar); +// CHECK: scanf("%LG", &longDoubleVar); +// CHECK: scanf("%La", &longDoubleVar); +// CHECK: scanf("%LA", &longDoubleVar); |