]> granicus.if.org Git - clang/commitdiff
Strip qualifiers off the type of an implicit property defined by
authorJohn McCall <rjmccall@apple.com>
Mon, 17 Oct 2011 20:05:43 +0000 (20:05 +0000)
committerJohn McCall <rjmccall@apple.com>
Mon, 17 Oct 2011 20:05:43 +0000 (20:05 +0000)
only a setter.

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

lib/Sema/SemaExprObjC.cpp
test/CodeGenObjC/arc-property.m [new file with mode: 0644]

index cc9e8b3758f3558f615ab3bf7834ede90dc7c817..527983805c92674b6d622c970180880de7d93aa0 100644 (file)
@@ -673,7 +673,7 @@ HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT,
       PType = getMessageSendResultType(QualType(OPT, 0), Getter, false, Super);
     else {
       ParmVarDecl *ArgDecl = *Setter->param_begin();
-      PType = ArgDecl->getType();
+      PType = ArgDecl->getType().getUnqualifiedType(); // can't be an array
     }
     
     ExprValueKind VK = VK_LValue;
diff --git a/test/CodeGenObjC/arc-property.m b/test/CodeGenObjC/arc-property.m
new file mode 100644 (file)
index 0000000..6c5180b
--- /dev/null
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc -emit-llvm %s -o - | FileCheck %s
+
+// rdar://problem/10290317
+@interface Test0
+- (void) setValue: (id) x;
+@end
+void test0(Test0 *t0, id value) {
+  t0.value = value;
+}
+// CHECK: define void @test0(
+// CHECK: call i8* @objc_retain(
+// CHECK: call i8* @objc_retain(
+// CHECK: @objc_msgSend
+// CHECK: call void @objc_release(
+// CHECK: call void @objc_release(