diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-24 18:32:56 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-05-24 18:32:56 +0000 |
commit | 36680dd7510fd6575ff9e9ae9cf5e23b9d20b379 (patch) | |
tree | 135d78bf0e86acd1a954d6112a0b11df45d52bdb /clang/lib/Frontend/RewriteObjC.cpp | |
parent | 51b37e0bd81341076765bb49a315b590fc7141a3 (diff) | |
download | bcm5719-llvm-36680dd7510fd6575ff9e9ae9cf5e23b9d20b379.tar.gz bcm5719-llvm-36680dd7510fd6575ff9e9ae9cf5e23b9d20b379.zip |
Fix a rewriting bug where a local static objective-c
pointer is copied into a block. Fixes radar 7924024.
llvm-svn: 104526
Diffstat (limited to 'clang/lib/Frontend/RewriteObjC.cpp')
-rw-r--r-- | clang/lib/Frontend/RewriteObjC.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Frontend/RewriteObjC.cpp b/clang/lib/Frontend/RewriteObjC.cpp index 4027b37c690..46883c99016 100644 --- a/clang/lib/Frontend/RewriteObjC.cpp +++ b/clang/lib/Frontend/RewriteObjC.cpp @@ -5220,6 +5220,12 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp, // FIXME: Conform to ABI ([[obj retain] autorelease]). FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString()); Exp = new (Context) DeclRefExpr(FD, FD->getType(), SourceLocation()); + if (HasLocalVariableExternalStorage(*I)) { + QualType QT = (*I)->getType(); + QT = Context->getPointerType(QT); + Exp = new (Context) UnaryOperator(Exp, UnaryOperator::AddrOf, QT, + SourceLocation()); + } } else if (isTopLevelBlockPointerType((*I)->getType())) { FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString()); Arg = new (Context) DeclRefExpr(FD, FD->getType(), SourceLocation()); |