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
This commit is contained in:
Ted Kremenek 2010-01-28 01:18:22 +00:00
parent 0830b9709d
commit c70ee8610d
2 changed files with 25 additions and 1 deletions

View File

@ -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);

View File

@ -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);