aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/Sema.h7
-rw-r--r--lib/Sema/SemaChecking.cpp19
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index 4fbc42cb0f..fb3ca1c465 100644
--- a/lib/Sema/Sema.h
+++ b/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/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 9305ff7562..2a5136ee9d 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/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);