[cfe-commits] r94788 - in /cfe/trunk: lib/Frontend/RewriteObjC.cpp test/Rewriter/rewrite-byref-vars.mm

Fariborz Jahanian fjahanian at apple.com
Thu Jan 28 17:55:49 PST 2010


Author: fjahanian
Date: Thu Jan 28 19:55:49 2010
New Revision: 94788

URL: http://llvm.org/viewvc/llvm-project?rev=94788&view=rev
Log:
Fixes rewriter bug rewriting byref related API where a struct
definition comes after where it is needed. Fixes radar 7589385.

Modified:
    cfe/trunk/lib/Frontend/RewriteObjC.cpp
    cfe/trunk/test/Rewriter/rewrite-byref-vars.mm

Modified: cfe/trunk/lib/Frontend/RewriteObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/RewriteObjC.cpp?rev=94788&r1=94787&r2=94788&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/RewriteObjC.cpp (original)
+++ cfe/trunk/lib/Frontend/RewriteObjC.cpp Thu Jan 28 19:55:49 2010
@@ -4085,8 +4085,7 @@
 void RewriteObjC::InsertBlockLiteralsWithinMethod(ObjCMethodDecl *MD) {
   //fprintf(stderr,"In InsertBlockLiteralsWitinMethod\n");
   //SourceLocation FunLocStart = MD->getLocStart();
-  // FIXME: This hack works around a bug in Rewrite.InsertText().
-  SourceLocation FunLocStart = MD->getLocStart().getFileLocWithOffset(-1);
+  SourceLocation FunLocStart = MD->getLocStart();
   std::string FuncName = MD->getSelector().getAsString();
   // Convert colons to underscores.
   std::string::size_type loc = 0;

Modified: cfe/trunk/test/Rewriter/rewrite-byref-vars.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/rewrite-byref-vars.mm?rev=94788&r1=94787&r2=94788&view=diff

==============================================================================
--- cfe/trunk/test/Rewriter/rewrite-byref-vars.mm (original)
+++ cfe/trunk/test/Rewriter/rewrite-byref-vars.mm Thu Jan 28 19:55:49 2010
@@ -36,9 +36,19 @@
    id list;
 }
 - (void) Meth;
+// radar 7589385 use before definition
+- (void) allObjects;
 @end
 
 @implementation I
+// radar 7589385 use before definition
+- (void) allObjects {
+    __attribute__((__blocks__(byref))) id *listp;
+
+    ^(void) {
+      *listp++ = 0;
+    };
+}
 - (void) Meth { __attribute__((__blocks__(byref))) void ** listp = (void **)list; }
 @end
 





More information about the cfe-commits mailing list