diff options
-rw-r--r-- | include/clang/Analysis/Analyses/PrintfFormatString.h | 9 | ||||
-rw-r--r-- | lib/Analysis/PrintfFormatString.cpp | 3 |
2 files changed, 10 insertions, 2 deletions
diff --git a/include/clang/Analysis/Analyses/PrintfFormatString.h b/include/clang/Analysis/Analyses/PrintfFormatString.h index 280c5baa6f..79500bb116 100644 --- a/include/clang/Analysis/Analyses/PrintfFormatString.h +++ b/include/clang/Analysis/Analyses/PrintfFormatString.h @@ -192,11 +192,11 @@ public: unsigned amountLength, bool usesPositionalArg) : start(amountStart), length(amountLength), hs(howSpecified), amt(amount), - UsesPositionalArg(usesPositionalArg) {} + UsesPositionalArg(usesPositionalArg), UsesDotPrefix(0) {} OptionalAmount(bool valid = true) : start(0),length(0), hs(valid ? NotSpecified : Invalid), amt(0), - UsesPositionalArg(0) {} + UsesPositionalArg(0), UsesDotPrefix(0) {} bool isInvalid() const { return hs == Invalid; @@ -236,12 +236,16 @@ public: return amt + 1; } + bool usesDotPrefix() const { return UsesDotPrefix; } + void setUsesDotPrefix() { UsesDotPrefix = true; } + private: const char *start; unsigned length; HowSpecified hs; unsigned amt; bool UsesPositionalArg : 1; + bool UsesDotPrefix; }; // Class representing optional flags with location and representation @@ -362,6 +366,7 @@ public: void setPrecision(const OptionalAmount &Amt) { Precision = Amt; + Precision.setUsesDotPrefix(); } const OptionalAmount &getPrecision() const { diff --git a/lib/Analysis/PrintfFormatString.cpp b/lib/Analysis/PrintfFormatString.cpp index ba32e749a8..951be17e2f 100644 --- a/lib/Analysis/PrintfFormatString.cpp +++ b/lib/Analysis/PrintfFormatString.cpp @@ -611,6 +611,9 @@ const char *LengthModifier::toString() const { //===----------------------------------------------------------------------===// void OptionalAmount::toString(llvm::raw_ostream &os) const { + if (UsesDotPrefix) + os << "."; + switch (hs) { case Invalid: case NotSpecified: |