зеркало из https://github.com/microsoft/clang-1.git
Introduce Sema::isNullExpr() that contains the checks that
Sema::DiagnoseSentinelCalls() does. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148722 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
438ee1fc5e
Коммит
4f1813e55a
|
@ -1375,6 +1375,7 @@ public:
|
|||
QualType &ConvertedType);
|
||||
bool IsBlockPointerConversion(QualType FromType, QualType ToType,
|
||||
QualType& ConvertedType);
|
||||
bool isNullExpr(const Expr *E) const;
|
||||
bool FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
|
||||
const FunctionProtoType *NewType,
|
||||
unsigned *ArgPos = 0);
|
||||
|
|
|
@ -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
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Загрузка…
Ссылка в новой задаче