diff options
Diffstat (limited to 'lib/Sema/SemaOverload.cpp')
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index e6b8056a42..50330e3f63 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -621,7 +621,8 @@ Sema::IsStandardConversion(Expr* From, QualType ToType, FromType->isEnumeralType() || FromType->isPointerType() || FromType->isBlockPointerType() || - FromType->isMemberPointerType())) { + FromType->isMemberPointerType() || + FromType->isNullPtrType())) { SCS.Second = ICK_Boolean_Conversion; FromType = Context.BoolTy; } @@ -898,6 +899,13 @@ bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, return true; } + // If the left-hand-side is nullptr_t, the right side can be a null + // pointer constant. + if (ToType->isNullPtrType() && From->isNullPointerConstant(Context)) { + ConvertedType = ToType; + return true; + } + const PointerType* ToTypePtr = ToType->getAsPointerType(); if (!ToTypePtr) return false; |