forked from OSchip/llvm-project
Support all null pointer literals in format strings.
llvm-svn: 150276
This commit is contained in:
parent
6b83daefd3
commit
59fe3f89cb
|
@ -1369,6 +1369,13 @@ bool Sema::SemaCheckStringLiteral(const Expr *E, Expr **Args,
|
|||
|
||||
E = E->IgnoreParenCasts();
|
||||
|
||||
if (E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
|
||||
// Technically -Wformat-nonliteral does not warn about this case.
|
||||
// The behavior of printf and friends in this case is implementation
|
||||
// dependent. Ideally if the format string cannot be null then
|
||||
// it should have a 'nonnull' attribute in the function prototype.
|
||||
return true;
|
||||
|
||||
switch (E->getStmtClass()) {
|
||||
case Stmt::BinaryConditionalOperatorClass:
|
||||
case Stmt::ConditionalOperatorClass: {
|
||||
|
@ -1381,14 +1388,6 @@ bool Sema::SemaCheckStringLiteral(const Expr *E, Expr **Args,
|
|||
inFunctionCall);
|
||||
}
|
||||
|
||||
case Stmt::GNUNullExprClass:
|
||||
case Stmt::IntegerLiteralClass:
|
||||
// Technically -Wformat-nonliteral does not warn about this case.
|
||||
// The behavior of printf and friends in this case is implementation
|
||||
// dependent. Ideally if the format string cannot be null then
|
||||
// it should have a 'nonnull' attribute in the function prototype.
|
||||
return true;
|
||||
|
||||
case Stmt::ImplicitCastExprClass: {
|
||||
E = cast<ImplicitCastExpr>(E)->getSubExpr();
|
||||
goto tryAgain;
|
||||
|
|
|
@ -10,4 +10,6 @@ void f(char **sp, float *fp) {
|
|||
|
||||
printf("%a", 1.0);
|
||||
scanf("%afoobar", fp);
|
||||
printf(nullptr);
|
||||
printf(*sp); // expected-warning {{not a string literal}}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,8 @@ extern "C" {
|
|||
|
||||
void rdar8269537(const char *f)
|
||||
{
|
||||
test_null_format(false); // expected-warning {{null from a constant boolean}}
|
||||
test_null_format(0); // no-warning
|
||||
test_null_format(__null); // no-warning
|
||||
test_null_format(f); // expected-warning {{not a string literal}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue