summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-01-28 01:18:22 +0000
committerTed Kremenek <kremenek@apple.com>2010-01-28 01:18:22 +0000
commitc70ee8610d96e0a6c493a9522bd568442d675470 (patch)
tree685e62450c9b5a84757cd033dbb2239613d0c787 /clang
parent0830b9709d35a3ba780615e38d8d4c458872a08a (diff)
downloadbcm5719-llvm-c70ee8610d96e0a6c493a9522bd568442d675470.tar.gz
bcm5719-llvm-c70ee8610d96e0a6c493a9522bd568442d675470.zip
Add placeholder function in Sema for new format string checking logic.
This function will use the format string parsing logic in libAnalysis, and once it is shown to be better than the current implementation it will replace AlternateCheckPrintfString() entirely. llvm-svn: 94721
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/Sema.h7
-rw-r--r--clang/lib/Sema/SemaChecking.cpp19
2 files changed, 25 insertions, 1 deletions
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h
index 4fbc42cb0f5..fb3ca1c4654 100644
--- a/clang/lib/Sema/Sema.h
+++ b/clang/lib/Sema/Sema.h
@@ -4047,6 +4047,13 @@ private:
bool SemaCheckStringLiteral(const Expr *E, const CallExpr *TheCall,
bool HasVAListArg, unsigned format_idx,
unsigned firstDataArg);
+ // FIXME: This function is placeholder for transitioning the printf
+ // format string checking to a new codepath. It will eventually
+ // replace CheckPrintfString().
+ void AlternateCheckPrintfString(const StringLiteral *FExpr,
+ const Expr *OrigFormatExpr,
+ const CallExpr *TheCall, bool HasVAListArg,
+ unsigned format_idx, unsigned firstDataArg);
void CheckPrintfString(const StringLiteral *FExpr, const Expr *OrigFormatExpr,
const CallExpr *TheCall, bool HasVAListArg,
unsigned format_idx, unsigned firstDataArg);
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 9305ff7562d..2a5136ee9d3 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -1036,6 +1036,14 @@ void Sema::CheckPrintfString(const StringLiteral *FExpr,
const Expr *OrigFormatExpr,
const CallExpr *TheCall, bool HasVAListArg,
unsigned format_idx, unsigned firstDataArg) {
+
+ static bool UseAlternatePrintfChecking = false;
+ if (UseAlternatePrintfChecking) {
+ AlternateCheckPrintfString(FExpr, OrigFormatExpr, TheCall,
+ HasVAListArg, format_idx, firstDataArg);
+ return;
+ }
+
const ObjCStringLiteral *ObjCFExpr =
dyn_cast<ObjCStringLiteral>(OrigFormatExpr);
@@ -1059,7 +1067,7 @@ void Sema::CheckPrintfString(const StringLiteral *FExpr,
<< OrigFormatExpr->getSourceRange();
return;
}
-
+
// We process the format string using a binary state machine. The
// current state is stored in CurrentState.
enum {
@@ -1271,6 +1279,15 @@ void Sema::CheckPrintfString(const StringLiteral *FExpr,
}
}
+void
+Sema::AlternateCheckPrintfString(const StringLiteral *FExpr,
+ const Expr *OrigFormatExpr,
+ const CallExpr *TheCall, bool HasVAListArg,
+ unsigned format_idx, unsigned firstDataArg) {
+
+
+}
+
//===--- CHECK: Return Address of Stack Variable --------------------------===//
static DeclRefExpr* EvalVal(Expr *E);
OpenPOWER on IntegriCloud