[clang] Add getUnsignedPointerDiffType method
authorAlexander Shaposhnikov <shal1t712@gmail.com>
Thu, 28 Sep 2017 23:11:31 +0000 (23:11 +0000)
committerAlexander Shaposhnikov <shal1t712@gmail.com>
Thu, 28 Sep 2017 23:11:31 +0000 (23:11 +0000)
commit195b25cf3cbde92e8613465571b5f3511c5cc69d
tree5e3ab1261aa73902302fe2e178ef81f5b939a099
parentef29a84d4890e00abdf1892f67a431e2624f89ec
[clang] Add getUnsignedPointerDiffType method

C11 standard refers to the unsigned counterpart of the type ptrdiff_t
in the paragraph 7.21.6.1p7 where it defines the format specifier %tu.
In Clang (in PrintfFormatString.cpp, lines 508-510) there is a FIXME for this case,
in particular, Clang didn't diagnose %tu issues at all, i.e.
it didn't emit any warnings on the code printf("%tu", 3.14).
In this diff we add a method getUnsignedPointerDiffType for getting the corresponding type
similarly to how it's already done in the other analogous cases (size_t, ssize_t, ptrdiff_t etc)
and fix -Wformat diagnostics for %tu plus the emitted fix-it as well.

Test plan: make check-all

Differential revision: https://reviews.llvm.org/D38270

llvm-svn: 314470
clang/include/clang/AST/ASTContext.h
clang/include/clang/Basic/TargetInfo.h
clang/lib/AST/ASTContext.cpp
clang/lib/Analysis/PrintfFormatString.cpp
clang/lib/Analysis/ScanfFormatString.cpp
clang/test/FixIt/format.m
clang/test/Sema/format-strings-scanf.c