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
This commit is contained in:
Nicola Pero 2010-11-01 21:12:12 +00:00 committed by Nicola Pero
parent 7894073c2f
commit 8f78939bbf
5 changed files with 95 additions and 0 deletions

View 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.

View 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;

View 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.

View File

@ -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);
}

View File

@ -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;
}