aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/FormatString.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/FormatString.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/FormatString.cpp')
-rw-r--r--clang/lib/Analysis/FormatString.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Analysis/FormatString.cpp b/clang/lib/Analysis/FormatString.cpp
index e4d84ec6..4959854 100644
--- a/clang/lib/Analysis/FormatString.cpp
+++ b/clang/lib/Analysis/FormatString.cpp
@@ -612,8 +612,20 @@ bool FormatSpecifier::hasValidLengthModifier(const TargetInfo &Target) const {
return true;
// Handle most integer flags
- case LengthModifier::AsChar:
case LengthModifier::AsShort:
+ if (Target.getTriple().isOSMSVCRT()) {
+ switch (CS.getKind()) {
+ case ConversionSpecifier::cArg:
+ case ConversionSpecifier::CArg:
+ case ConversionSpecifier::sArg:
+ case ConversionSpecifier::SArg:
+ return true;
+ default:
+ break;
+ }
+ }
+ // Fall through.
+ case LengthModifier::AsChar:
case LengthModifier::AsLongLong:
case LengthModifier::AsQuad:
case LengthModifier::AsIntMax: