===================================================================
@@ -1121,6 +1121,9 @@ objc_maybe_build_component_ref (tree object, tree
{
tree expression;
+ if (TREE_DEPRECATED (x))
+ warn_deprecated_use (x, NULL_TREE);
+
expression = build2 (PROPERTY_REF, TREE_TYPE(x), object, x);
SET_EXPR_LOCATION (expression, input_location);
TREE_SIDE_EFFECTS (expression) = 1;
@@ -10873,6 +10876,13 @@ objc_maybe_printable_name (tree decl, int v ATTRIB
case CLASS_METHOD_DECL:
return IDENTIFIER_POINTER (DECL_NAME (decl));
break;
+ /* This happens when printing a deprecation warning for a
+ property. We may want to consider some sort of pretty
+ printing (eg, include the class name where it was declared
+ ?). */
+ case PROPERTY_DECL:
+ return IDENTIFIER_POINTER (PROPERTY_NAME (decl));
+ break;
default:
return NULL;
break;
===================================================================
@@ -1,5 +1,11 @@
2010-10-30 Nicola Pero <nicola.pero@meta-innovation.com>
+ * objc-act.c (objc_maybe_build_component_ref): Warn about using
+ deprecated properties.
+ (objc_maybe_printable_name): Support PROPERTY_DECL.
+
+2010-10-30 Nicola Pero <nicola.pero@meta-innovation.com>
+
Implemented Objective-C 2.0 @property, @synthesize and @dynamic.
* objc-tree.def (PROPERTY_REF): New.
* objc-act.h: Added comments for all the PROPERTY_ macros.
===================================================================
@@ -1,5 +1,10 @@
2010-10-30 Nicola Pero <nicola.pero@meta-innovation.com>
+ * objc.dg/property/at-property-deprecated-1.m: New.
+ * obj-c++.dg/property/at-property-deprecated-1.mm: New.
+
+2010-10-30 Nicola Pero <nicola.pero@meta-innovation.com>
+
Implemented Objective-C 2.0 @property, @synthesize and @dynamic.
* objc.dg/property/property-neg-1.m: Updated for changes in the
syntax of @property and the implementation of
===================================================================
@@ -0,0 +1,37 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, October 2010. */
+/* { dg-do compile } */
+
+/* Test that properties can be deprecated. */
+
+#include <stdlib.h>
+#include <objc/objc.h>
+#include <objc/runtime.h>
+
+@interface MyRootClass
+{
+ Class isa;
+ int a;
+}
+@property int a __attribute__((deprecated));
++ (id) initialize;
++ (id) alloc;
+- (id) init;
+@end
+
+@implementation MyRootClass
++ (id) initialize { return self; }
++ (id) alloc { return class_createInstance (self, 0); }
+- (id) init { return self; }
+@synthesize a;
+@end
+
+int main (void)
+{
+ MyRootClass *object = [[MyRootClass alloc] init];
+
+ object.a = 40; /* { dg-warning ".a. is deprecated .declared at " } */
+ if (object.a != 40) /* { dg-warning ".a. is deprecated .declared at " } */
+ abort ();
+
+ return (0);
+}