From 071f2aec57467027540ea849b7889c4c263dbb7d Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 27 Nov 2008 00:15:41 +0000 Subject: [PATCH] Support block pointer conversions in C++. I'm storing the test case locally until we can enable blocks in C++ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60133 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 3d9ec8d6cb..d14d74cb82 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -743,9 +743,24 @@ BuildSimilarlyQualifiedPointerType(const PointerType *FromPtr, /// 4.10). If so, returns true and places the converted type (that /// might differ from ToType in its cv-qualifiers at some level) into /// ConvertedType. +/// +/// This routine also supports conversions to and from block pointers. bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, QualType& ConvertedType) { + // Blocks: Block pointers can be converted to void*. + if (FromType->isBlockPointerType() && ToType->isPointerType() && + ToType->getAsPointerType()->getPointeeType()->isVoidType()) { + ConvertedType = ToType; + return true; + } + // Blocks: A null pointer constant can be converted to a block + // pointer type. + if (ToType->isBlockPointerType() && From->isNullPointerConstant(Context)) { + ConvertedType = ToType; + return true; + } + const PointerType* ToTypePtr = ToType->getAsPointerType(); if (!ToTypePtr) return false; -- 2.40.0