diff options
-rw-r--r-- | gcc/objc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/attributes/class-attribute-3.mm | 14 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/attributes/proto-attribute-4.mm | 31 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/attributes/class-attribute-3.m | 14 | ||||
-rw-r--r-- | gcc/testsuite/objc.dg/attributes/proto-attribute-4.m | 31 |
7 files changed, 111 insertions, 0 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 562081b..b717a94 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,11 @@ +2010-12-30 Nicola Pero <nicola@nicola.brainstorm.co.uk> + + * objc-act.c (start_class): Warn when a class attribute is + ignored. + (objc_declare_protocols): Warn when a protocol attribute in a + protocol forward-declaration is ignored. + (start_protocol): Warn when a protocol attribute is ignored. + 2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com> * objc-act.c (objc_set_method_opt): Tidy up error messages. In diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index bc959d6..a0a7a09 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -9722,6 +9722,8 @@ start_class (enum tree_code code, tree class_name, tree super_name, if (is_attribute_p ("deprecated", name)) TREE_DEPRECATED (klass) = 1; + else + warning (OPT_Wattributes, "%qE attribute directive ignored", name); } TYPE_ATTRIBUTES (klass) = attributes; } @@ -10924,6 +10926,8 @@ objc_declare_protocols (tree names, tree attributes) if (is_attribute_p ("deprecated", name)) deprecated = true; + else + warning (OPT_Wattributes, "%qE attribute directive ignored", name); } } @@ -10977,6 +10981,8 @@ start_protocol (enum tree_code code, tree name, tree list, tree attributes) if (is_attribute_p ("deprecated", name)) deprecated = true; + else + warning (OPT_Wattributes, "%qE attribute directive ignored", name); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 43b5afb..7dd36f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-12-30 Nicola Pero <nicola.pero@meta-innovation.com> + + * objc.dg/attributes/class-attribute-3.m: New. + * objc.dg/attributes/proto-attribute-4.m: New. + * obj-c++.dg/attributes/class-attribute-3.mm: New. + * obj-c++.dg/attributes/proto-attribute-4.mm: New. + 2010-12-30 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/47060 diff --git a/gcc/testsuite/obj-c++.dg/attributes/class-attribute-3.mm b/gcc/testsuite/obj-c++.dg/attributes/class-attribute-3.mm new file mode 100644 index 0000000..f96500d --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/attributes/class-attribute-3.mm @@ -0,0 +1,14 @@ +/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown class attribute is ignored. */ + +#include <objc/objc.h> + +__attribute__ ((unknown_attribute)) +@interface MyClass /* { dg-warning "ignored" } */ +{ + Class isa; +} ++ (id) new; +@end diff --git a/gcc/testsuite/obj-c++.dg/attributes/proto-attribute-4.mm b/gcc/testsuite/obj-c++.dg/attributes/proto-attribute-4.mm new file mode 100644 index 0000000..d2e5f28 --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/attributes/proto-attribute-4.mm @@ -0,0 +1,31 @@ +/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown protocol attribute is ignored. */ + +#include <objc/objc.h> + +__attribute__ ((unknown_attribute)) +@protocol MyProtocol /* { dg-warning "ignored" } */ +- (id) new; +@end + +__attribute__ ((unknown_attribute)) +@protocol MyProtocol2; /* { dg-warning "ignored" } */ + +/* Use the protocols to double-check that no more warnings are + generated. */ + +@interface MyClass <MyProtocol> +@end + +int test (id <MyProtocol2> x) +{ + if (@protocol (MyProtocol) == @protocol (MyProtocol2)) + return 1; + + if (x) + return 2; + + return 3; +} diff --git a/gcc/testsuite/objc.dg/attributes/class-attribute-3.m b/gcc/testsuite/objc.dg/attributes/class-attribute-3.m new file mode 100644 index 0000000..6cc5d4e --- /dev/null +++ b/gcc/testsuite/objc.dg/attributes/class-attribute-3.m @@ -0,0 +1,14 @@ +/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown class attribute is ignored. */ + +#include <objc/objc.h> + +__attribute__ ((unknown_attribute)) +@interface MyClass +{ /* { dg-warning "ignored" } */ + Class isa; +} ++ (id) new; +@end diff --git a/gcc/testsuite/objc.dg/attributes/proto-attribute-4.m b/gcc/testsuite/objc.dg/attributes/proto-attribute-4.m new file mode 100644 index 0000000..226fd68 --- /dev/null +++ b/gcc/testsuite/objc.dg/attributes/proto-attribute-4.m @@ -0,0 +1,31 @@ +/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown protocol attribute is ignored. */ + +#include <objc/objc.h> + +__attribute__ ((unknown_attribute)) +@protocol MyProtocol +- (id) new; /* { dg-warning "ignored" } */ +@end + +__attribute__ ((unknown_attribute)) +@protocol MyProtocol2; /* { dg-warning "ignored" } */ + +/* Use the protocols to double-check that no more warnings are + generated. */ + +@interface MyClass <MyProtocol> +@end + +int test (id <MyProtocol2> x) +{ + if (@protocol (MyProtocol) == @protocol (MyProtocol2)) + return 1; + + if (x) + return 2; + + return 3; +} |