Patch to allow C-style cast from 'void *' to block pointer type.
(fixes radar 7465023). llvm-svn: 91171
This commit is contained in:
parent
f72bdf7eed
commit
ffe912c647
|
@ -1575,7 +1575,10 @@ public:
|
|||
|
||||
/// CK_AnyPointerToObjCPointerCast - Casting any pointer to objective-c
|
||||
/// pointer
|
||||
CK_AnyPointerToObjCPointerCast
|
||||
CK_AnyPointerToObjCPointerCast,
|
||||
/// CK_AnyPointerToBlockPointerCast - Casting any pointer to block
|
||||
/// pointer
|
||||
CK_AnyPointerToBlockPointerCast
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -560,6 +560,8 @@ const char *CastExpr::getCastKindName() const {
|
|||
return "MemberPointerToBoolean";
|
||||
case CastExpr::CK_AnyPointerToObjCPointerCast:
|
||||
return "AnyPointerToObjCPointerCast";
|
||||
case CastExpr::CK_AnyPointerToBlockPointerCast:
|
||||
return "AnyPointerToBlockPointerCast";
|
||||
}
|
||||
|
||||
assert(0 && "Unhandled cast kind!");
|
||||
|
|
|
@ -809,6 +809,7 @@ Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
|
|||
break;
|
||||
|
||||
case CastExpr::CK_AnyPointerToObjCPointerCast:
|
||||
case CastExpr::CK_AnyPointerToBlockPointerCast:
|
||||
case CastExpr::CK_BitCast: {
|
||||
Value *Src = Visit(const_cast<Expr*>(E));
|
||||
return Builder.CreateBitCast(Src, ConvertType(DestTy));
|
||||
|
|
|
@ -545,6 +545,11 @@ static TryCastResult TryStaticCast(Sema &Self, Expr *&SrcExpr,
|
|||
Kind = CastExpr::CK_AnyPointerToObjCPointerCast;
|
||||
return TC_Success;
|
||||
}
|
||||
else if (CStyle && DestType->isBlockPointerType()) {
|
||||
// allow c-style cast of void * to block pointers.
|
||||
Kind = CastExpr::CK_AnyPointerToBlockPointerCast;
|
||||
return TC_Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,3 +44,9 @@ namespace N {
|
|||
foo(N::X()); // okay
|
||||
}
|
||||
@end
|
||||
|
||||
typedef signed char BOOL;
|
||||
void foo6(void *block) {
|
||||
void (^vb)(id obj, int idx, BOOL *stop) = (void (^)(id, int, BOOL *))block;
|
||||
BOOL (^bb)(id obj, int idx, BOOL *stop) = (BOOL (^)(id, int, BOOL *))block;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue