]> granicus.if.org Git - clang/commitdiff
Fixes rewriter bug rewriting byref related API where a struct
authorFariborz Jahanian <fjahanian@apple.com>
Fri, 29 Jan 2010 01:55:49 +0000 (01:55 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Fri, 29 Jan 2010 01:55:49 +0000 (01:55 +0000)
definition comes after where it is needed. Fixes radar 7589385.

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

lib/Frontend/RewriteObjC.cpp
test/Rewriter/rewrite-byref-vars.mm

index 68d9b27c401c874e61a16382699fc930caa1fe8f..df43da7efff3221d05b6045708886e339cd21e5e 100644 (file)
@@ -4085,8 +4085,7 @@ void RewriteObjC::InsertBlockLiteralsWithinFunction(FunctionDecl *FD) {
 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;
index 1489c5947293ebf26587ce90a43c604028621486..58b925a2b28c2b90b98a38834523019a91885af8 100644 (file)
@@ -36,9 +36,19 @@ __declspec(dllexport) extern "C" __declspec(dllexport) void XXXXBreakTheRewriter
    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