diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-03 05:58:16 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-03 05:58:16 +0000 |
| commit | 2e809ce7b464ccad9d0a76d7e4c221f5631f2f97 (patch) | |
| tree | 6e1e72405a0a95694ff36606001343ffe668e8d9 /clang | |
| parent | 54478a514cba5472d220cf7d1334d864f562f207 (diff) | |
| download | bcm5719-llvm-2e809ce7b464ccad9d0a76d7e4c221f5631f2f97.tar.gz bcm5719-llvm-2e809ce7b464ccad9d0a76d7e4c221f5631f2f97.zip | |
Move isSentinelNullExpr() from Sema to ASTContext to make it more widely
available.
llvm-svn: 149675
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/AST/ASTContext.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Sema/Sema.h | 1 | ||||
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 18 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 20 |
4 files changed, 21 insertions, 20 deletions
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index ebbbc7276eb..6a7b7d90e57 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -1664,6 +1664,8 @@ public: return Res; } + bool isSentinelNullExpr(const Expr *E); + /// \brief Get the implementation of ObjCInterfaceDecl,or NULL if none exists. ObjCImplementationDecl *getObjCImplementation(ObjCInterfaceDecl *D); /// \brief Get the implementation of ObjCCategoryDecl, or NULL if none exists. diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 9c8802c34f8..4d27ba02921 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -1381,7 +1381,6 @@ public: QualType &ConvertedType); bool IsBlockPointerConversion(QualType FromType, QualType ToType, QualType& ConvertedType); - bool isSentinelNullExpr(const Expr *E) const; bool FunctionArgTypesAreEqual(const FunctionProtoType *OldType, const FunctionProtoType *NewType, unsigned *ArgPos = 0); diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 295489f4898..3b669320e9a 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1247,6 +1247,24 @@ unsigned ASTContext::CountNonClassIvars(const ObjCInterfaceDecl *OI) const { return count; } +bool ASTContext::isSentinelNullExpr(const Expr *E) { + if (!E) + return false; + + // nullptr_t is always treated as null. + if (E->getType()->isNullPtrType()) return true; + + if (E->getType()->isAnyPointerType() && + E->IgnoreParenCasts()->isNullPointerConstant(*this, + Expr::NPC_ValueDependentIsNull)) + return true; + + // Unfortunately, __null has type 'int'. + if (isa<GNUNullExpr>(E)) return true; + + return false; +} + /// \brief Get the implementation of ObjCInterfaceDecl,or NULL if none exists. ObjCImplementationDecl *ASTContext::getObjCImplementation(ObjCInterfaceDecl *D) { llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*>::iterator diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 175c0c1648e..df17297e478 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -249,7 +249,7 @@ void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, Expr *sentinelExpr = args[numArgs - numArgsAfterSentinel - 1]; if (!sentinelExpr) return; if (sentinelExpr->isValueDependent()) return; - if (isSentinelNullExpr(sentinelExpr)) return; + if (Context.isSentinelNullExpr(sentinelExpr)) return; // Pick a reasonable string to insert. Optimistically use 'nil' or // 'NULL' if those are actually defined in the context. Only use @@ -279,24 +279,6 @@ SourceRange Sema::getExprRange(Expr *E) const { return E ? E->getSourceRange() : SourceRange(); } -bool Sema::isSentinelNullExpr(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 //===----------------------------------------------------------------------===// |

