]> granicus.if.org Git - clang/commitdiff
Initialize Obj-C GC attributes when emitting BlockDeclRefExprs.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 23 May 2009 02:49:02 +0000 (02:49 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 23 May 2009 02:49:02 +0000 (02:49 +0000)
 - Otherwise we may incorrectly miss generation of some write barriers.

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

lib/CodeGen/CGExpr.cpp
test/CodeGenObjC/blocks-2.m [new file with mode: 0644]

index 0b7ad05b3055ddf21388af88026afa22a730cded..2fe67542933e5ab0d0db8d9ab8972f74fec1fb80 100644 (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) {
diff --git a/test/CodeGenObjC/blocks-2.m b/test/CodeGenObjC/blocks-2.m
new file mode 100644 (file)
index 0000000..a4d8bfa
--- /dev/null
@@ -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;
+}