summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-04-16 22:14:01 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-04-16 22:14:01 +0000
commitcc1722818bd3affa65e07ac7fae29715bc20babb (patch)
tree1e69a01f2d4990af4c12c79844de22c4c273c8aa /clang/lib
parentcc31af932857df36b2bda2b7432f928ab8bb2934 (diff)
downloadbcm5719-llvm-cc1722818bd3affa65e07ac7fae29715bc20babb.tar.gz
bcm5719-llvm-cc1722818bd3affa65e07ac7fae29715bc20babb.zip
modern objective-c translator: translation of implicit
cast to/from block pointer types. // rdar://11202764 Also, many more modern translator tests. llvm-svn: 154869
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Rewrite/RewriteModernObjC.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/clang/lib/Rewrite/RewriteModernObjC.cpp b/clang/lib/Rewrite/RewriteModernObjC.cpp
index b3d85a4ad39..5d124aba9f2 100644
--- a/clang/lib/Rewrite/RewriteModernObjC.cpp
+++ b/clang/lib/Rewrite/RewriteModernObjC.cpp
@@ -4460,19 +4460,18 @@ void RewriteModernObjC::RewriteCastExpr(CStyleCastExpr *CE) {
void RewriteModernObjC::RewriteImplicitCastObjCExpr(CastExpr *IC) {
CastKind CastKind = IC->getCastKind();
+ if (CastKind != CK_BlockPointerToObjCPointerCast &&
+ CastKind != CK_AnyPointerToBlockPointerCast)
+ return;
- if (CastKind == CK_BlockPointerToObjCPointerCast) {
- CStyleCastExpr * CastExpr =
- NoTypeInfoCStyleCastExpr(Context, IC->getType(), CK_BitCast, IC);
- ReplaceStmt(IC, CastExpr);
- }
- else if (CastKind == CK_AnyPointerToBlockPointerCast) {
- QualType BlockT = IC->getType();
- (void)convertBlockPointerToFunctionPointer(BlockT);
- CStyleCastExpr * CastExpr =
- NoTypeInfoCStyleCastExpr(Context, BlockT, CK_BitCast, IC);
- ReplaceStmt(IC, CastExpr);
- }
+ QualType QT = IC->getType();
+ (void)convertBlockPointerToFunctionPointer(QT);
+ std::string TypeString(QT.getAsString(Context->getPrintingPolicy()));
+ std::string Str = "(";
+ Str += TypeString;
+ Str += ")";
+ InsertText(IC->getSubExpr()->getLocStart(), &Str[0], Str.size());
+
return;
}
@@ -5357,12 +5356,10 @@ Stmt *RewriteModernObjC::RewriteFunctionBodyOrGlobalInitializer(Stmt *S) {
if (CStyleCastExpr *CE = dyn_cast<CStyleCastExpr>(S)) {
RewriteCastExpr(CE);
}
-#if 0
- // FIXME. Cannot safely rewrite ImplicitCasts. This is the 2nd failed
- // attempt: (id)((__typeof(z))_Block_copy((const void *)(z)));
if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(S)) {
RewriteImplicitCastObjCExpr(ICE);
}
+#if 0
if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(S)) {
CastExpr *Replacement = new (Context) CastExpr(ICE->getType(),
OpenPOWER on IntegriCloud