This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix for PR libobjc/47012
- From: "Nicola Pero" <nicola dot pero at meta-innovation dot com>
- To: "gcc-patches at gnu dot org" <gcc-patches at gnu dot org>
- Date: Sun, 19 Dec 2010 20:13:47 +0100 (CET)
- Subject: Fix for PR libobjc/47012
This patch fixes libobjc/47012. See the bug discussion for more info.
Committed to trunk.
Thanks
Index: accessors.m
===================================================================
--- accessors.m (revision 168068)
+++ accessors.m (working copy)
@@ -106,8 +106,18 @@
{
id *pointer_to_ivar = (id *)((char *)self + offset);
+
if (is_atomic == NO)
- return AUTORELEASE (RETAIN (*pointer_to_ivar));
+ {
+ /* Note that in this case, we do not RETAIN/AUTORELEASE the
+ returned value. The programmer should do it if it is
+ needed. Since access is non-atomic, other threads can be
+ ignored and the caller has full control of what happens
+ to the object and whether it needs to be RETAINed or not,
+ so it makes sense to leave the decision to him/her. This
+ is also what the Apple/NeXT runtime does. */
+ return *pointer_to_ivar;
+ }
else
{
objc_mutex_t lock = accessors_locks[ACCESSORS_HASH (pointer_to_ivar)];
Index: ChangeLog
===================================================================
--- ChangeLog (revision 168068)
+++ ChangeLog (working copy)
@@ -1,5 +1,11 @@
2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
+ PR libobjc/47012
+ * accessors.m (objc_getProperty): If not atomic, do not
+ retain/autorelease the returned value. (Problem reported by
+
+2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
+
* objc-private/runtime.h (__objc_selector_max_index,
__objc_init_selector_tables, __objc_register_selectors_from_class,
__objc_register_selectors_from_list,