diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-09-07 03:03:51 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-09-07 03:03:51 +0000 |
commit | c597b4c5291d6c5017ea24fdbdca664b258b7eb2 (patch) | |
tree | 9d4f361e75e437d740333d1094ad7438c90eda4c /clang/lib/Analysis/FormatString.cpp | |
parent | 69abd72e4985185536a600cfd40a20554f7c4951 (diff) | |
download | llvm-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.cpp | 9 |
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!"); |