Initialize Obj-C GC attributes when emitting BlockDeclRefExprs.

- Otherwise we may incorrectly miss generation of some write barriers.

llvm-svn: 72313
This commit is contained in:
Daniel Dunbar 2009-05-23 02:49:02 +00:00
parent eeac588471
commit 223db1c9e5
2 changed files with 14 additions and 1 deletions

View File

@ -723,7 +723,9 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
}
LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) {
return LValue::MakeAddr(GetAddrOfBlockDecl(E), 0);
return LValue::MakeAddr(GetAddrOfBlockDecl(E),
E->getType().getCVRQualifiers(),
getContext().getObjCGCAttrKind(E->getType()));
}
LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) {

View File

@ -0,0 +1,11 @@
// RUN: clang-cc %s -emit-llvm -o %t -fobjc-gc -fblocks -triple i386-apple-darwin10 &&
// RUN: grep "objc_assign_strongCast" %t | count 2 &&
// RUN: true
// This should generate a strong cast.
id test3(id x) {
__block id result;
^{ result = x; }();
return result;
}