diff options
author | Hans Wennborg <hans@hanshq.net> | 2011-12-10 13:20:11 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2011-12-10 13:20:11 +0000 |
commit | 6fcd932dfd6835f70cc00d6f7c6789793f6d7b66 (patch) | |
tree | 2ee0188182bc788b5a2ad7707914e8850c36ac83 /test/Sema/format-strings-fixit.c | |
parent | e7edf30143e565574c9bed0f1dbeaa47bb9a0891 (diff) |
Check that arguments to a scanf call match the format specifier,
and offer fixits when there is a mismatch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146326 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema/format-strings-fixit.c')
-rw-r--r-- | test/Sema/format-strings-fixit.c | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/test/Sema/format-strings-fixit.c b/test/Sema/format-strings-fixit.c index bfb54327b7..4fb6d75d76 100644 --- a/test/Sema/format-strings-fixit.c +++ b/test/Sema/format-strings-fixit.c @@ -10,6 +10,11 @@ int printf(char const *, ...); +typedef __SIZE_TYPE__ size_t; +typedef __INTMAX_TYPE__ intmax_t; +typedef __UINTMAX_TYPE__ uintmax_t; +typedef __PTRDIFF_TYPE__ ptrdiff_t; + void test() { // Basic types printf("%s", (int) 123); @@ -47,11 +52,6 @@ void test() { unsigned long val = 42; printf("%X", val); - typedef __SIZE_TYPE__ size_t; - typedef __INTMAX_TYPE__ intmax_t; - typedef __UINTMAX_TYPE__ uintmax_t; - typedef __PTRDIFF_TYPE__ ptrdiff_t; - // size_t, etc. printf("%f", (size_t) 42); printf("%f", (intmax_t) 42); @@ -62,6 +62,51 @@ void test() { printf("%ld", "foo"); } +int scanf(char const *, ...); + +void test2() { + char str[100]; + short shortVar; + unsigned short uShortVar; + int intVar; + unsigned uIntVar; + float floatVar; + double doubleVar; + long double longDoubleVar; + long longVar; + unsigned long uLongVar; + long long longLongVar; + unsigned long long uLongLongVar; + size_t sizeVar; + intmax_t intmaxVar; + uintmax_t uIntmaxVar; + ptrdiff_t ptrdiffVar; + + scanf("%lf", str); + scanf("%f", &shortVar); + scanf("%f", &uShortVar); + scanf("%p", &intVar); + scanf("%Lf", &uIntVar); + scanf("%ld", &floatVar); + scanf("%f", &doubleVar); + scanf("%d", &longDoubleVar); + scanf("%f", &longVar); + scanf("%f", &uLongVar); + scanf("%f", &longLongVar); + scanf("%f", &uLongLongVar); + + // Some named ints. + scanf("%f", &sizeVar); + scanf("%f", &intmaxVar); + scanf("%f", &uIntmaxVar); + scanf("%f", &ptrdiffVar); + + // Perserve the original formatting for unsigned integers. + scanf("%o", &uLongVar); + scanf("%x", &uLongVar); + scanf("%X", &uLongVar); +} + // Validate the fixes... // CHECK: printf("%d", (int) 123); // CHECK: printf("abc%s", "testing testing 123"); @@ -87,3 +132,23 @@ void test() { // CHECK: printf("%ju", (uintmax_t) 42); // CHECK: printf("%td", (ptrdiff_t) 42); // CHECK: printf("%s", "foo"); + +// CHECK: scanf("%s", str); +// CHECK: scanf("%hd", &shortVar); +// CHECK: scanf("%hu", &uShortVar); +// CHECK: scanf("%d", &intVar); +// CHECK: scanf("%u", &uIntVar); +// CHECK: scanf("%f", &floatVar); +// CHECK: scanf("%lf", &doubleVar); +// CHECK: scanf("%Lf", &longDoubleVar); +// CHECK: scanf("%ld", &longVar); +// CHECK: scanf("%lu", &uLongVar); +// CHECK: scanf("%lld", &longLongVar); +// CHECK: scanf("%llu", &uLongLongVar); +// CHECK: scanf("%zu", &sizeVar); +// CHECK: scanf("%jd", &intmaxVar); +// CHECK: scanf("%ju", &uIntmaxVar); +// CHECK: scanf("%td", &ptrdiffVar); +// CHECK: scanf("%lo", &uLongVar); +// CHECK: scanf("%lx", &uLongVar); +// CHECK: scanf("%lX", &uLongVar); |