From 29bf94d86fba0babf426e3d25abaae24dd9971bd Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 19 Sep 2018 18:13:34 +0000 Subject: Sema: handle `wint_t` more carefully for printf checking In the case that `win_t` is an `unsigned short` (e.g. on Windows), we would previously incorrectly diagnose the conversion because we would immediately promote the argument type from `wint_t` (aka `unsigned short`) to `int` before checking if the type matched. This should repair the Windows hosted bots. llvm-svn: 342565 --- clang/lib/Analysis/FormatString.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'clang/lib/Analysis/FormatString.cpp') diff --git a/clang/lib/Analysis/FormatString.cpp b/clang/lib/Analysis/FormatString.cpp index f37e4affae3..0bab50c569f 100644 --- a/clang/lib/Analysis/FormatString.cpp +++ b/clang/lib/Analysis/FormatString.cpp @@ -406,12 +406,14 @@ ArgType::matchesType(ASTContext &C, QualType argTy) const { } case WIntTy: { + QualType WInt = C.getCanonicalType(C.getWIntType()).getUnqualifiedType(); - QualType PromoArg = - argTy->isPromotableIntegerType() - ? C.getPromotedIntegerType(argTy) : argTy; + if (C.getCanonicalType(argTy).getUnqualifiedType() == WInt) + return Match; - QualType WInt = C.getCanonicalType(C.getWIntType()).getUnqualifiedType(); + QualType PromoArg = argTy->isPromotableIntegerType() + ? C.getPromotedIntegerType(argTy) + : argTy; PromoArg = C.getCanonicalType(PromoArg).getUnqualifiedType(); // If the promoted argument is the corresponding signed type of the -- cgit v1.2.3