In gcc/objc/: 2010-11-01 Nicola Pero <nicola.pero@meta-innovation.com>
authorNicola Pero <nicola.pero@meta-innovation.com>
Mon, 1 Nov 2010 21:12:12 +0000 (21:12 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Mon, 1 Nov 2010 21:12:12 +0000 (21:12 +0000)
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

gcc/objc/ChangeLog
gcc/objc/objc-act.c
gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm [new file with mode: 0644]
gcc/testsuite/objc.dg/property/at-property-deprecated-1.m [new file with mode: 0644]

index 5a7c85f5fc2a3be43a6d7aa5063263625384b426..1e6129164283b9c0c722dc2f6f54535de64e82d2 100644 (file)
@@ -1,3 +1,9 @@
+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. 
index 00e2a4330a3feba58d6698c0415aa119ed00db1f..68639ce8356906dcc318cef6401ba95e4e21b4c6 100644 (file)
@@ -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;
index ae4de13e2f57bec0b91b1a9db0332286dc9c57db..ccace6fc17cf91b5226ace7cf5c324ce281cbe0e 100644 (file)
@@ -1,3 +1,8 @@
+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.
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 (file)
index 0000000..1bcb288
--- /dev/null
@@ -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 (file)
index 0000000..c38854f
--- /dev/null
@@ -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;
+}