]> granicus.if.org Git - clang/commitdiff
Fixes a potential crash in rewriter when sending message
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 20 Oct 2010 16:07:20 +0000 (16:07 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 20 Oct 2010 16:07:20 +0000 (16:07 +0000)
to 'super'.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116928 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Rewrite/RewriteObjC.cpp

index eac652c10329a830a75c14fa14e75b6220529ddb..3d54816c4c0654dd90ab11eb39cfaf6b95bccc60 100644 (file)
@@ -1250,11 +1250,6 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
   llvm::SmallVector<Expr *, 1> ExprVec;
   ExprVec.push_back(newStmt);
 
-  if (Expr *Exp = dyn_cast<Expr>(Receiver))
-    if (PropGetters[Exp])
-      // This allows us to handle chain/nested property/implicit getters.
-      Receiver = PropGetters[Exp];
-  
   ObjCMessageExpr *MsgExpr;
   if (Super)
     MsgExpr = ObjCMessageExpr::Create(*Context, 
@@ -1266,7 +1261,15 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
                                       Sel, OMD,
                                       &ExprVec[0], 1,
                                       /*FIXME:*/SourceLocation());
-  else
+  else {
+    // FIXME. Refactor this into common code with that in 
+    // RewritePropertyOrImplicitGetter
+    assert(Receiver && "RewritePropertyOrImplicitSetter - null Receiver");
+    if (Expr *Exp = dyn_cast<Expr>(Receiver))
+      if (PropGetters[Exp])
+        // This allows us to handle chain/nested property/implicit getters.
+        Receiver = PropGetters[Exp];
+  
     MsgExpr = ObjCMessageExpr::Create(*Context, 
                                       Ty.getNonReferenceType(),
                                       /*FIXME: */SourceLocation(),
@@ -1274,6 +1277,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
                                       Sel, OMD,
                                       &ExprVec[0], 1,
                                       /*FIXME:*/SourceLocation());
+  }
   Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr);
 
   // Now do the actual rewrite.
@@ -1325,11 +1329,6 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
   
   assert (OMD && "RewritePropertyOrImplicitGetter - OMD is null");
   
-  if (Expr *Exp = dyn_cast<Expr>(Receiver))
-    if (PropGetters[Exp])
-      // This allows us to handle chain/nested property/implicit getters.
-      Receiver = PropGetters[Exp];
-  
   ObjCMessageExpr *MsgExpr;
   if (Super)
     MsgExpr = ObjCMessageExpr::Create(*Context, 
@@ -1341,7 +1340,12 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
                                       Sel, OMD,
                                       0, 0, 
                                       /*FIXME:*/SourceLocation());
-  else
+  else {
+    assert (Receiver && "RewritePropertyOrImplicitGetter - Receiver is null");
+    if (Expr *Exp = dyn_cast<Expr>(Receiver))
+      if (PropGetters[Exp])
+        // This allows us to handle chain/nested property/implicit getters.
+        Receiver = PropGetters[Exp];
     MsgExpr = ObjCMessageExpr::Create(*Context, 
                                       Ty.getNonReferenceType(),
                                       /*FIXME:*/SourceLocation(),
@@ -1349,6 +1353,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
                                       Sel, OMD,
                                       0, 0, 
                                       /*FIXME:*/SourceLocation());
+  }
 
   Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr);