aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-11-01 21:12:12 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-11-01 21:12:12 +0000
commit8f78939bbf5706bec999fe2b2425eeea8f48f239 (patch)
tree291eda46a4b7cc011568cfec681b056cfcddeac6
parent7894073c2f67f53e1c8da85d2c92d71701eff9fb (diff)
downloadgcc-8f78939bbf5706bec999fe2b2425eeea8f48f239.zip
gcc-8f78939bbf5706bec999fe2b2425eeea8f48f239.tar.gz
gcc-8f78939bbf5706bec999fe2b2425eeea8f48f239.tar.bz2
In gcc/objc/: 2010-11-01 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/objc/: 2010-11-01 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. In gcc/testsuite/: 2010-11-01 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. From-SVN: r166147
-rw-r--r--gcc/objc/ChangeLog6
-rw-r--r--gcc/objc/objc-act.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm37
-rw-r--r--gcc/testsuite/objc.dg/property/at-property-deprecated-1.m37
5 files changed, 95 insertions, 0 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 5a7c85f..1e61291 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,5 +1,11 @@
2010-11-01 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-11-01 Nicola Pero <nicola.pero@meta-innovation.com>
+
Implemented Objective-C 2.0 property accessors.
* objc-act.h (enum objc_tree_index): Added OCTI_GET_PROPERTY_DECL,
OCTI_SET_PROPERTY_DECL, OCTI_COPY_STRUCT_DECL,
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 00e2a43..68639ce 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -1122,6 +1122,9 @@ objc_maybe_build_component_ref (tree object, tree property_ident)
{
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;
@@ -11224,6 +11227,13 @@ objc_maybe_printable_name (tree decl, int v ATTRIBUTE_UNUSED)
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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ae4de13..ccace6f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2010-11-01 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-11-01 Nicola Pero <nicola.pero@meta-innovation.com>
+
Implemented Objective-C 2.0 property accessors.
* objc.dg/property/at-property-6.m: Use nonatomic properties to
avoid testing more complex accessors in this testcase which is not
diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm b/gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm
new file mode 100644
index 0000000..1bcb288
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm
@@ -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);
+}
diff --git a/gcc/testsuite/objc.dg/property/at-property-deprecated-1.m b/gcc/testsuite/objc.dg/property/at-property-deprecated-1.m
new file mode 100644
index 0000000..c38854f
--- /dev/null
+++ b/gcc/testsuite/objc.dg/property/at-property-deprecated-1.m
@@ -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;
+}