diff options
| author | iains <iains@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-07 14:05:24 +0000 |
|---|---|---|
| committer | iains <iains@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-07 14:05:24 +0000 |
| commit | b79b475d0dd7fe7d492035c2c05b5c5a83ed7639 (patch) | |
| tree | cf236f98bc8a616033ac7a6dc99454808110a4ec | |
| parent | 094f1866410f22cd5288aed6991d43cd2f2ad9c5 (diff) | |
| download | ppe42-gcc-b79b475d0dd7fe7d492035c2c05b5c5a83ed7639.tar.gz ppe42-gcc-b79b475d0dd7fe7d492035c2c05b5c5a83ed7639.zip | |
do not emit bogus set-not-used warnings for objc* entities used as message receivers.
gcc/objc:
* objc-act.c (objc_build_message_expr): Call mark_exp_read () to signal that
the receiver has been used.
gcc/testsuite:
* objc.dg/set-not-used-1.m: New
* obj-c++.dg/set-not-used-1.mm: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165111 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/objc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/objc/objc-act.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/obj-c++.dg/set-not-used-1.mm | 36 | ||||
| -rw-r--r-- | gcc/testsuite/objc.dg/set-not-used-1.m | 36 |
5 files changed, 85 insertions, 0 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index e075f9346e0..27de164764c 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,8 @@ +2010-10-07 Iain Sandoe <iains@gcc.gnu.org> + + * objc-act.c (objc_build_message_expr): Call mark_exp_read () to signal that + the receiver has been used. + 2010-10-06 Nicola Pero <nicola.pero@meta-innovation.com> * README: Obsolete file removed. diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 730efba48d8..e1dca585442 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -6455,6 +6455,9 @@ objc_finish_message_expr (tree receiver, tree sel_name, tree method_params) tree selector, retval, class_tree; int self, super, have_cast; + /* We have used the receiver, so mark it as 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). */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a07e2e4de69..f78e4962bd6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-10-07 Iain Sandoe <iains@gcc.gnu.org> + * objc.dg/set-not-used-1.m: New + * obj-c++.dg/set-not-used-1.mm: New. + +2010-10-07 Iain Sandoe <iains@gcc.gnu.org> + * objc.dg/attributes/method-attribute-3.m: New. * obj-c++.dg/attributes/method-attribute-3.mm: New. diff --git a/gcc/testsuite/obj-c++.dg/set-not-used-1.mm b/gcc/testsuite/obj-c++.dg/set-not-used-1.mm new file mode 100644 index 00000000000..6380ec9df5d --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/set-not-used-1.mm @@ -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]; +} diff --git a/gcc/testsuite/objc.dg/set-not-used-1.m b/gcc/testsuite/objc.dg/set-not-used-1.m new file mode 100644 index 00000000000..6380ec9df5d --- /dev/null +++ b/gcc/testsuite/objc.dg/set-not-used-1.m @@ -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]; +} |

