From e981a8c231725ff9bf96f867922a59fac49a580f Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 5 Nov 2010 15:21:33 +0000 Subject: [PATCH] Expressions of type std::nullptr_t can be used as sentinels. llvm-svn: 118276 --- clang/lib/Sema/SemaExpr.cpp | 4 ++++ clang/test/SemaCXX/nullptr.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 6df818cd7a5a..9ac4ce88d102 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/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/clang/test/SemaCXX/nullptr.cpp b/clang/test/SemaCXX/nullptr.cpp index 0a0d098e364f..4f6e2e6eb1c5 100644 --- a/clang/test/SemaCXX/nullptr.cpp +++ b/clang/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); + } +}