From: Anders Carlsson Date: Fri, 5 Nov 2010 15:21:33 +0000 (+0000) Subject: Expressions of type std::nullptr_t can be used as sentinels. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=343e6ffa70459b1afdb488c69fb651434a5016c0;p=clang Expressions of type std::nullptr_t can be used as sentinels. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118276 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 6df818cd7a..9ac4ce88d1 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -193,6 +193,10 @@ void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, if (!sentinelExpr) return; if (sentinelExpr->isTypeDependent()) 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)) diff --git a/test/SemaCXX/nullptr.cpp b/test/SemaCXX/nullptr.cpp index 0a0d098e36..4f6e2e6eb1 100644 --- a/test/SemaCXX/nullptr.cpp +++ b/test/SemaCXX/nullptr.cpp @@ -84,3 +84,12 @@ bool g(bool); // Test that we prefer g(void*) over g(bool). static_assert(is_same::value, ""); } + +namespace test2 { + void f(int, ...) __attribute__((sentinel)); + + void g() { + // nullptr can be used as the sentinel value. + f(10, nullptr); + } +}