aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2002-08-08 16:14:19 -0700
committerDevang Patel <dpatel@gcc.gnu.org>2002-08-08 16:14:19 -0700
commit7b9be5c7cbb31b0aad7ca2ce3b0d31b322aa2d42 (patch)
tree1c3d5900b372fd225e1625f1a80348962ade8465 /gcc
parent6fde981568f348315bc0ba2b656c0a0b94f27b31 (diff)
downloadgcc-7b9be5c7cbb31b0aad7ca2ce3b0d31b322aa2d42.zip
gcc-7b9be5c7cbb31b0aad7ca2ce3b0d31b322aa2d42.tar.gz
gcc-7b9be5c7cbb31b0aad7ca2ce3b0d31b322aa2d42.tar.bz2
objc-act.c (build_selector_translation_table): Issue warning...
* objc/objc-act.c (build_selector_translation_table): Issue warning, when -Wselector is used,if method for which selector is being created does not exist. Testsuite: *objc.dg/selector-1.m: New test From-SVN: r56142
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/objc/objc-act.c26
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/objc.dg/selector-1.m26
4 files changed, 60 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fa7430e..7c22cb6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-08 Devang Patel <dpatel@apple.com>
+ * objc/objc-act.c (build_selector_translation_table): Issue warning,
+ when -Wselector is used,if method for which selector is being
+ created does not exist.
+
2002-08-08 Stephen Clarke <stephen.clarke@superh.com>
* config/sh/sh.c (prepare_move_operands): Only call
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 7ebb9f2..c16e57c 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -1886,6 +1886,32 @@ build_selector_translation_table ()
{
tree expr;
+ if (warn_selector && objc_implementation_context)
+ {
+ tree method_chain;
+ bool found = false;
+ for (method_chain = meth_var_names_chain;
+ method_chain;
+ method_chain = TREE_CHAIN (method_chain))
+ {
+ if (TREE_VALUE (method_chain) == TREE_VALUE (chain))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ /* Adjust line number for warning message. */
+ int save_lineno = lineno;
+ if (flag_next_runtime && TREE_PURPOSE (chain))
+ lineno = DECL_SOURCE_LINE (TREE_PURPOSE (chain));
+ warning ("creating selector for non existant method %s",
+ IDENTIFIER_POINTER (TREE_VALUE (chain)));
+ lineno = save_lineno;
+ }
+ }
+
expr = build_selector (TREE_VALUE (chain));
if (flag_next_runtime)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0f7dfe5..07c3a50 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,6 @@
+2002-08-08 Devang Patel <dpatel@apple.com>
+ *objc.dg/selector-1.m : New test
+
2002-08-08 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/abi/bitfield4.c: New test.
diff --git a/gcc/testsuite/objc.dg/selector-1.m b/gcc/testsuite/objc.dg/selector-1.m
new file mode 100644
index 0000000..b23cc90
--- /dev/null
+++ b/gcc/testsuite/objc.dg/selector-1.m
@@ -0,0 +1,26 @@
+/* Test warning for non existing selectors. */
+/* Contributed by Devang Patel <dpatel@apple.com>. */
+/* { dg-options "-Wselector -fnext-runtime" } */
+/* { dg-do compile } */
+
+typedef struct objc_object { struct objc_class *class_pointer; } *id;
+typedef struct objc_selector *SEL;
+
+@interface Foo
+- (void) foo;
+- (void) bar;
+@end
+
+@implementation Foo
+- (void) bar
+{
+}
+
+- (void) foo
+{
+ SEL a,b,c;
+ a = @selector(b1ar); /* { dg-warning "creating selector for non existant method b1ar" } */
+ b = @selector(bar);
+}
+@end
+