]> granicus.if.org Git - clang/commitdiff
Minor cleanup of the rewriter.
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 26 Feb 2010 22:36:30 +0000 (22:36 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 26 Feb 2010 22:36:30 +0000 (22:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97280 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/RewriteObjC.cpp

index b69dc3678c4076fbda15df94f0fdaedb3e0afc0d..be07a6aadf4d598ab0e391fa8c4e1f2b8204a576 100644 (file)
@@ -4955,28 +4955,32 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp,
   
   // Add inner imported variables now used in current block.
  int countOfInnerDecls = 0;
-  for (unsigned i = 0; i < InnerBlockDeclRefs.size(); i++) {
-    BlockDeclRefExpr *Exp = InnerBlockDeclRefs[i];
-    ValueDecl *VD = Exp->getDecl();
-    if (!Exp->isByRef() && !BlockByCopyDeclsPtrSet.count(VD)) {
+  if (!InnerBlockDeclRefs.empty()) {
+    for (unsigned i = 0; i < InnerBlockDeclRefs.size(); i++) {
+      BlockDeclRefExpr *Exp = InnerBlockDeclRefs[i];
+      ValueDecl *VD = Exp->getDecl();
+      if (!Exp->isByRef() && !BlockByCopyDeclsPtrSet.count(VD)) {
       // We need to save the copied-in variables in nested
       // blocks because it is needed at the end for some of the API generations.
       // See SynthesizeBlockLiterals routine.
-      InnerDeclRefs.push_back(Exp); countOfInnerDecls++;
-      BlockDeclRefs.push_back(Exp);
-      BlockByCopyDeclsPtrSet.insert(VD);
-      BlockByCopyDecls.push_back(VD);
-      if (Exp->getType()->isObjCObjectPointerType() || 
-          Exp->getType()->isBlockPointerType())
-        ImportedBlockDecls.insert(VD);
-    }
-    if (Exp->isByRef() && !BlockByRefDeclsPtrSet.count(VD)) {
-      InnerDeclRefs.push_back(Exp); countOfInnerDecls++;
-      BlockDeclRefs.push_back(Exp);
-      BlockByRefDeclsPtrSet.insert(VD);
-      BlockByRefDecls.push_back(VD);
-      ImportedBlockDecls.insert(VD);
+        InnerDeclRefs.push_back(Exp); countOfInnerDecls++;
+        BlockDeclRefs.push_back(Exp);
+        BlockByCopyDeclsPtrSet.insert(VD);
+        BlockByCopyDecls.push_back(VD);
+      }
+      if (Exp->isByRef() && !BlockByRefDeclsPtrSet.count(VD)) {
+        InnerDeclRefs.push_back(Exp); countOfInnerDecls++;
+        BlockDeclRefs.push_back(Exp);
+        BlockByRefDeclsPtrSet.insert(VD);
+        BlockByRefDecls.push_back(VD);
+      }
     }
+    // Find any imported blocks...they will need special attention.
+    for (unsigned i = 0; i < InnerBlockDeclRefs.size(); i++)
+      if (InnerBlockDeclRefs[i]->isByRef() ||
+          InnerBlockDeclRefs[i]->getType()->isObjCObjectPointerType() || 
+          InnerBlockDeclRefs[i]->getType()->isBlockPointerType())
+        ImportedBlockDecls.insert(InnerBlockDeclRefs[i]->getDecl());
   }
   InnerDeclRefsCount.push_back(countOfInnerDecls);