This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch ObjC*] don't warn 'set not used' when an object is a receiver.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]