diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-01-23 20:38:53 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-01-23 20:38:53 +0000 |
commit | ba52365ae3e01cd94f621aaf5460bd48090e6c0f (patch) | |
tree | e97fbad01cdadf9440a283884af9c0896cd5f152 /clang/lib/Sema | |
parent | e660fdd953b494f6b4f6b41782a47a5eb367b333 (diff) | |
download | bcm5719-llvm-ba52365ae3e01cd94f621aaf5460bd48090e6c0f.tar.gz bcm5719-llvm-ba52365ae3e01cd94f621aaf5460bd48090e6c0f.zip |
Introduce Sema::isNullExpr() that contains the checks that
Sema::DiagnoseSentinelCalls() does.
llvm-svn: 148722
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 96496662503..8d263b3b662 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -249,17 +249,7 @@ void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, Expr *sentinelExpr = args[numArgs - numArgsAfterSentinel - 1]; if (!sentinelExpr) return; if (sentinelExpr->isValueDependent()) return; - - // nullptr_t is always treated as null. - if (sentinelExpr->getType()->isNullPtrType()) return; - - if (sentinelExpr->getType()->isAnyPointerType() && - sentinelExpr->IgnoreParenCasts()->isNullPointerConstant(Context, - Expr::NPC_ValueDependentIsNull)) - return; - - // Unfortunately, __null has type 'int'. - if (isa<GNUNullExpr>(sentinelExpr)) return; + if (isNullExpr(sentinelExpr)) return; // Pick a reasonable string to insert. Optimistically use 'nil' or // 'NULL' if those are actually defined in the context. Only use @@ -289,6 +279,24 @@ SourceRange Sema::getExprRange(Expr *E) const { return E ? E->getSourceRange() : SourceRange(); } +bool Sema::isNullExpr(const Expr *E) const { + if (!E) + return false; + + // nullptr_t is always treated as null. + if (E->getType()->isNullPtrType()) return true; + + if (E->getType()->isAnyPointerType() && + E->IgnoreParenCasts()->isNullPointerConstant(Context, + Expr::NPC_ValueDependentIsNull)) + return true; + + // Unfortunately, __null has type 'int'. + if (isa<GNUNullExpr>(E)) return true; + + return false; +} + //===----------------------------------------------------------------------===// // Standard Promotions and Conversions //===----------------------------------------------------------------------===// |