diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2010-11-01 21:12:12 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2010-11-01 21:12:12 +0000 |
commit | 8f78939bbf5706bec999fe2b2425eeea8f48f239 (patch) | |
tree | 291eda46a4b7cc011568cfec681b056cfcddeac6 | |
parent | 7894073c2f67f53e1c8da85d2c92d71701eff9fb (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm | 37 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/property/at-property-deprecated-1.m | 37 |
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; +} |