diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-01-29 01:55:49 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-01-29 01:55:49 +0000 |
commit | 0e1c99a1a9068020daa7d85fcafb18490ea6a475 (patch) | |
tree | eba89baad38fe177341482f039ae1cecf8b0025d | |
parent | 07d161f38e708a91486bf1c031d525faebbb249d (diff) |
Fixes rewriter bug rewriting byref related API where a struct
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
-rw-r--r-- | lib/Frontend/RewriteObjC.cpp | 3 | ||||
-rw-r--r-- | test/Rewriter/rewrite-byref-vars.mm | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/Frontend/RewriteObjC.cpp b/lib/Frontend/RewriteObjC.cpp index 68d9b27c40..df43da7eff 100644 --- a/lib/Frontend/RewriteObjC.cpp +++ b/lib/Frontend/RewriteObjC.cpp @@ -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; diff --git a/test/Rewriter/rewrite-byref-vars.mm b/test/Rewriter/rewrite-byref-vars.mm index 1489c59472..58b925a2b2 100644 --- a/test/Rewriter/rewrite-byref-vars.mm +++ b/test/Rewriter/rewrite-byref-vars.mm @@ -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 |