This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch ObjC*] don't warn 'set not used' when an object is a receiver.
- From: Jakub Jelinek <jakub at redhat dot com>
- To: IainS <developer at sandoe-acoustics dot co dot uk>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Mike Stump <mrs at gcc dot gnu dot org>, Nicola Pero <nicola dot pero at meta-innovation dot com>
- Date: Wed, 6 Oct 2010 20:14:00 +0200
- Subject: Re: [Patch ObjC*] don't warn 'set not used' when an object is a receiver.
- References: <2D419F6A-9F07-4533-B7FF-A51464F0E118@sandoe-acoustics.co.uk>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Wed, Oct 06, 2010 at 07:07:43PM +0100, IainS wrote:
> Index: gcc/objc/objc-act.c
> ===================================================================
> --- gcc/objc/objc-act.c (revision 165023)
> +++ gcc/objc/objc-act.c (working copy)
> @@ -6409,7 +6409,7 @@ objc_build_message_expr (tree mess)
> method_params = args;
> }
> #endif
> -
> +
> #ifdef OBJCPLUS
> if (processing_template_decl)
> /* Must wait until template instantiation time. */
> @@ -6455,6 +6455,13 @@ objc_finish_message_expr (tree receiver, tree sel_
> tree selector, retval, class_tree;
> int self, super, have_cast;
>
> + /* If we have an instance, then it has been used/read. */
> + if (TREE_CODE (receiver) == VAR_DECL)
> + {
> + TREE_USED (receiver) = 1;
> + DECL_READ_P (receiver) = 1;
> + }
> +
I think you should just do
mark_exp_read (receiver);
instead.
> --- gcc/testsuite/objc.dg/set-not-used-1.m (revision 0)
> +++ gcc/testsuite/objc.dg/set-not-used-1.m (revision 0)
> @@ -0,0 +1,36 @@
> +
> +/* { dg-do compile } */
> +/* { dg-options "-Wunused-but-set-variable" } */
> +
> +#import "../objc-obj-c++-shared/Object1.h"
> +#include <objc/objc-api.h>
> +
> +@interface obj : Object
> +{
> + int value;
> +}
> +- (int) value;
> +- (void) setValue: (int)number;
> +@end
> +
> +@implementation obj : Object
> +
> +- (int) value { return value; }
> +- (void) setValue: (int)number { value = number; }
> +
> +@end
> +
> +int main (void)
> +{
> + obj *a; /* { dg-bogus "set but not used" } */
> + obj *b; /* { dg-bogus "set but not used" } */
> + obj *c; /* { dg-warning "set but not used" } */
> +
> + a = [obj new];
> + b = [obj new];
> + c = [obj new];
> +
> + [b setValue: [a value]];
> +
> + return [a value];
> +}
> Index: gcc/testsuite/obj-c++.dg/set-not-used-1.mm
> ===================================================================
> --- gcc/testsuite/obj-c++.dg/set-not-used-1.mm (revision 0)
> +++ gcc/testsuite/obj-c++.dg/set-not-used-1.mm (revision 0)
> @@ -0,0 +1,36 @@
> +
> +/* { dg-do compile } */
> +/* { dg-options "-Wunused-but-set-variable" } */
> +
> +#import "../objc-obj-c++-shared/Object1.h"
> +#include <objc/objc-api.h>
> +
> +@interface obj : Object
> +{
> + int value;
> +}
> +- (int) value;
> +- (void) setValue: (int)number;
> +@end
> +
> +@implementation obj : Object
> +
> +- (int) value { return value; }
> +- (void) setValue: (int)number { value = number; }
> +
> +@end
> +
> +int main (void)
> +{
> + obj *a; /* { dg-bogus "set but not used" } */
> + obj *b; /* { dg-bogus "set but not used" } */
> + obj *c; /* { dg-warning "set but not used" } */
> +
> + a = [obj new];
> + b = [obj new];
> + c = [obj new];
> +
> + [b setValue: [a value]];
> +
> + return [a value];
> +}
Jakub