diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-09-04 21:39:52 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-09-04 21:39:52 +0000 |
commit | 1b23158ce419a1c67a27aa45ec9f2a5b26b6b9a9 (patch) | |
tree | 21cc72d241d1e4270f3751643c9fcede5dac50af /clang/lib/Analysis/PrintfFormatString.cpp | |
parent | 68f42b95150281a6b8f031a8ec4c820aec8fd163 (diff) | |
download | llvm-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.cpp | 12 |
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; |