aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/PrintfFormatString.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-09-04 21:39:52 +0000
committerHans Wennborg <hans@hanshq.net>2014-09-04 21:39:52 +0000
commit1b23158ce419a1c67a27aa45ec9f2a5b26b6b9a9 (patch)
tree21cc72d241d1e4270f3751643c9fcede5dac50af /clang/lib/Analysis/PrintfFormatString.cpp
parent68f42b95150281a6b8f031a8ec4c820aec8fd163 (diff)
downloadllvm-1b23158ce419a1c67a27aa45ec9f2a5b26b6b9a9.zip
llvm-1b23158ce419a1c67a27aa45ec9f2a5b26b6b9a9.tar.gz
llvm-1b23158ce419a1c67a27aa45ec9f2a5b26b6b9a9.tar.bz2
MS format strings: allow the 'h' length modifier with C, C, s and S (PR20808)
llvm-svn: 217196
Diffstat (limited to 'clang/lib/Analysis/PrintfFormatString.cpp')
-rw-r--r--clang/lib/Analysis/PrintfFormatString.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Analysis/PrintfFormatString.cpp b/clang/lib/Analysis/PrintfFormatString.cpp
index 38dc8ae..1bb3aac 100644
--- a/clang/lib/Analysis/PrintfFormatString.cpp
+++ b/clang/lib/Analysis/PrintfFormatString.cpp
@@ -266,10 +266,14 @@ ArgType PrintfSpecifier::getArgType(ASTContext &Ctx,
if (CS.getKind() == ConversionSpecifier::cArg)
switch (LM.getKind()) {
- case LengthModifier::None: return Ctx.IntTy;
+ case LengthModifier::None:
+ return Ctx.IntTy;
case LengthModifier::AsLong:
case LengthModifier::AsWide:
return ArgType(ArgType::WIntTy, "wint_t");
+ case LengthModifier::AsShort:
+ if (Ctx.getTargetInfo().getTriple().isOSMSVCRT())
+ return Ctx.IntTy;
default:
return ArgType::Invalid();
}
@@ -395,10 +399,16 @@ ArgType PrintfSpecifier::getArgType(ASTContext &Ctx,
if (IsObjCLiteral)
return ArgType(Ctx.getPointerType(Ctx.UnsignedShortTy.withConst()),
"const unichar *");
+ if (Ctx.getTargetInfo().getTriple().isOSMSVCRT() &&
+ LM.getKind() == LengthModifier::AsShort)
+ return ArgType::CStrTy;
return ArgType(ArgType::WCStrTy, "wchar_t *");
case ConversionSpecifier::CArg:
if (IsObjCLiteral)
return ArgType(Ctx.UnsignedShortTy, "unichar");
+ if (Ctx.getTargetInfo().getTriple().isOSMSVCRT() &&
+ LM.getKind() == LengthModifier::AsShort)
+ return Ctx.IntTy;
return ArgType(Ctx.WideCharTy, "wchar_t");
case ConversionSpecifier::pArg:
return ArgType::CPointerTy;