diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 562081b9876..b717a946d05 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,11 @@ +2010-12-30 Nicola Pero + + * 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 * 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 bc959d6060b..a0a7a095eb4 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 43b5afb6c39..7dd36f1b9b0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-12-30 Nicola Pero + + * 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 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 00000000000..f96500de4dc --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/attributes/class-attribute-3.mm @@ -0,0 +1,14 @@ +/* Contributed by Nicola Pero , December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown class attribute is ignored. */ + +#include + +__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 00000000000..d2e5f28a1b4 --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/attributes/proto-attribute-4.mm @@ -0,0 +1,31 @@ +/* Contributed by Nicola Pero , December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown protocol attribute is ignored. */ + +#include + +__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 +@end + +int test (id 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 00000000000..6cc5d4e2681 --- /dev/null +++ b/gcc/testsuite/objc.dg/attributes/class-attribute-3.m @@ -0,0 +1,14 @@ +/* Contributed by Nicola Pero , December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown class attribute is ignored. */ + +#include + +__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 00000000000..226fd68b3f2 --- /dev/null +++ b/gcc/testsuite/objc.dg/attributes/proto-attribute-4.m @@ -0,0 +1,31 @@ +/* Contributed by Nicola Pero , December 2010. */ +/* { dg-do compile } */ + +/* Test that you get a warning when an unknown protocol attribute is ignored. */ + +#include + +__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 +@end + +int test (id x) +{ + if (@protocol (MyProtocol) == @protocol (MyProtocol2)) + return 1; + + if (x) + return 2; + + return 3; +}