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

login
register
mail settings
Submitter IainS
Date Oct. 6, 2010, 6:21 p.m.
Message ID <14EDD433-885D-49DF-91EE-D0BB6183DAE9@sandoe-acoustics.co.uk>
Download mbox | patch
Permalink /patch/66958/
State New
Headers show

Comments

IainS - Oct. 6, 2010, 6:21 p.m.
On 6 Oct 2010, at 19:14, Jakub Jelinek wrote:

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

thanks Jakub,

OK now?

amended:





>
>> --- 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
Mike Stump - Oct. 6, 2010, 7:55 p.m.
On Oct 6, 2010, at 11:21 AM, IainS wrote:
>> I think you should just do
>> mark_exp_read (receiver);
>> instead.
> 
> thanks Jakub,
> 
> OK now?

OK.

Patch

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,9 @@  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.  */
+  mark_exp_read (receiver);
+
    /* Extract the receiver of the message, as well as its type
       (where the latter may take the form of a cast or be inferred
       from the implementation context).  */