aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/FormatString.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-09-07 03:03:51 +0000
committerHans Wennborg <hans@hanshq.net>2014-09-07 03:03:51 +0000
commitc597b4c5291d6c5017ea24fdbdca664b258b7eb2 (patch)
tree9d4f361e75e437d740333d1094ad7438c90eda4c /clang/lib/Analysis/FormatString.cpp
parent69abd72e4985185536a600cfd40a20554f7c4951 (diff)
downloadllvm-c597b4c5291d6c5017ea24fdbdca664b258b7eb2.zip
llvm-c597b4c5291d6c5017ea24fdbdca664b258b7eb2.tar.gz
llvm-c597b4c5291d6c5017ea24fdbdca664b258b7eb2.tar.bz2
MS format strings: parse the 'Z' printf conversion specifier (PR20808)
llvm-svn: 217326
Diffstat (limited to 'clang/lib/Analysis/FormatString.cpp')
-rw-r--r--clang/lib/Analysis/FormatString.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Analysis/FormatString.cpp b/clang/lib/Analysis/FormatString.cpp
index 4959854..8c663d8 100644
--- a/clang/lib/Analysis/FormatString.cpp
+++ b/clang/lib/Analysis/FormatString.cpp
@@ -554,6 +554,9 @@ const char *ConversionSpecifier::toString() const {
// GlibC specific specifiers.
case PrintErrno: return "m";
+
+ // MS specific specifiers.
+ case ZArg: return "Z";
}
return nullptr;
}
@@ -619,6 +622,7 @@ bool FormatSpecifier::hasValidLengthModifier(const TargetInfo &Target) const {
case ConversionSpecifier::CArg:
case ConversionSpecifier::sArg:
case ConversionSpecifier::SArg:
+ case ConversionSpecifier::ZArg:
return true;
default:
break;
@@ -671,6 +675,7 @@ bool FormatSpecifier::hasValidLengthModifier(const TargetInfo &Target) const {
case ConversionSpecifier::cArg:
case ConversionSpecifier::sArg:
case ConversionSpecifier::ScanListArg:
+ case ConversionSpecifier::ZArg:
return true;
default:
return false;
@@ -740,7 +745,8 @@ bool FormatSpecifier::hasValidLengthModifier(const TargetInfo &Target) const {
case ConversionSpecifier::cArg:
case ConversionSpecifier::CArg:
case ConversionSpecifier::sArg:
- case ConversionSpecifier::SArg: // FIXME: Or Z.
+ case ConversionSpecifier::SArg:
+ case ConversionSpecifier::ZArg:
return Target.getTriple().isOSMSVCRT();
default:
return false;
@@ -805,6 +811,7 @@ bool FormatSpecifier::hasStandardConversionSpecifier(const LangOptions &LangOpt)
case ConversionSpecifier::DArg:
case ConversionSpecifier::OArg:
case ConversionSpecifier::UArg:
+ case ConversionSpecifier::ZArg:
return false;
}
llvm_unreachable("Invalid ConversionSpecifier Kind!");