]> granicus.if.org Git - clang/commitdiff
Minor rewriter cleanup and a test for a block rewriting bug.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 16 Feb 2010 17:26:03 +0000 (17:26 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 16 Feb 2010 17:26:03 +0000 (17:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96361 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/RewriteObjC.cpp
test/Rewriter/rewrite-block-pointer.mm

index bf6d2ac8fabb2d31811457743fccf02b6d698a77..9d4d6047160479d99ae57f7fd9d932ea6cfc0cab 100644 (file)
@@ -3918,7 +3918,6 @@ std::string RewriteObjC::SynthesizeBlockFunc(BlockExpr *CE, int i,
   for (llvm::SmallVector<ValueDecl*,8>::iterator I = BlockByCopyDecls.begin(),
        E = BlockByCopyDecls.end(); I != E; ++I) {
     S += "  ";
-    std::string Name = (*I)->getNameAsString();
     // Handle nested closure invocation. For example:
     //
     //   void (^myImportedClosure)(void);
@@ -3937,6 +3936,7 @@ std::string RewriteObjC::SynthesizeBlockFunc(BlockExpr *CE, int i,
       S += "__cself->" + (*I)->getNameAsString() + "; // bound by copy\n";
     }
     else {
+      std::string Name = (*I)->getNameAsString();
       (*I)->getType().getAsStringInternal(Name, Context->PrintingPolicy);
       S += Name + " = __cself->" + 
                               (*I)->getNameAsString() + "; // bound by copy\n";
index b03b7a9dec0a3439e8cd0e4672f30c33fd929088..9d07038bd27efa7dc0a203f17b5b1958a316e9dc 100644 (file)
@@ -2,6 +2,7 @@
 // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s
 // radar 7638400
 
+// FIXME. Arrange this test's rewritten source to compile with clang
 @interface X
 @end
 
@@ -14,3 +15,16 @@ static void enumerateIt(void (^block)(id, id, char *)) {
 @end
 
 // CHECK-LP: static void enumerateIt(void (*)(id, id, char *));
+
+// radar 7651312
+void apply(void (^block)(int));
+
+static void x(int (^cmp)(int, int)) {
+       x(cmp);
+}
+
+static void y(int (^cmp)(int, int)) {
+       apply(^(int sect) {
+               x(cmp);
+    });
+}