In libobjc/: 2011-05-24 Nicola Pero <nicola.pero@meta-innovation.com>
authorNicola Pero <nicola.pero@meta-innovation.com>
Tue, 24 May 2011 21:39:24 +0000 (21:39 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Tue, 24 May 2011 21:39:24 +0000 (21:39 +0000)
In libobjc/:
2011-05-24  Nicola Pero  <nicola.pero@meta-innovation.com>

PR libobjc/48177
* selector.c (__sel_register_typed_name): Use sel_types_match()
instead of strcmp() to compare selector types (Suggestion by
Richard Frith-Macdonald <rfm@gnu.org>).

In gcc/testsuite/:
2011-05-24  Nicola Pero  <nicola.pero@meta-innovation.com>

PR libobjc/48177
* objc.dg/pr48177.m: New testcase.

From-SVN: r174143

gcc/testsuite/ChangeLog
gcc/testsuite/objc.dg/pr48177.m [new file with mode: 0644]
libobjc/ChangeLog
libobjc/selector.c

index bf257e06f3633b4d052a1717ef6d4cb684c00a04..c1dcaedaf6569bfab8e817c69bd3d1d1690c2d71 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-24  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       PR libobjc/48177
+       * objc.dg/pr48177.m: New testcase.      
+
 2011-05-24  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        PR objc/48187
diff --git a/gcc/testsuite/objc.dg/pr48177.m b/gcc/testsuite/objc.dg/pr48177.m
new file mode 100644 (file)
index 0000000..0d7ff29
--- /dev/null
@@ -0,0 +1,35 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, May 2011.  */
+/* { dg-do run } */
+/* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
+
+#include <objc/runtime.h>
+#include <stdlib.h>
+
+int main(int argc, void **args)
+{
+#ifdef __GNU_LIBOBJC__
+  /* This special test tests that, if you have a selector already
+     registered in the runtime with full type information, you can use
+     sel_registerTypedName() to get it even if you specify the type
+     with incorrect argframe information.  This is helpful as
+     selectors generated by the compiler (which have correct argframe
+     information) are usually registered before hand-written ones
+     (which often have incorrect argframe information, but need the
+     correct one).
+
+     Note that in this hand-written test, even the type information of
+     the first selector may be wrong (on this machine); but that's OK
+     as we'll never actually use the selectors.  */
+  SEL selector1 = sel_registerTypedName ("testMethod", "i8@0:4");
+  SEL selector2 = sel_registerTypedName ("testMethod", "i8@8:8");
+  
+  /* We compare the selectors using ==, not using sel_isEqual().  This
+     is because we are testing internals of the runtime and we know
+     that in the current implementation they should be identical if
+     the stuff is to work as expected.  Don't do this at home.  */
+  if (selector1 != selector2)
+    abort ();
+#endif
+
+  return 0;
+}
index a29170442905715de11c2e99e8d45f7c71dd4419..1785ff165fa8a1a93e30ab73f8c67deebbb92c2d 100644 (file)
@@ -1,3 +1,10 @@
+2011-05-24  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       PR libobjc/48177
+       * selector.c (__sel_register_typed_name): Use sel_types_match()
+       instead of strcmp() to compare selector types (Suggestion by
+       Richard Frith-Macdonald <rfm@gnu.org>).
+
 2011-04-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR libobjc/32037
index 80d2d8004227dd091c8afdd7e906a10ee01eeefe..628b4f6f46611d6cd9e91c32f869071e77ec22a4 100644 (file)
@@ -597,7 +597,7 @@ __sel_register_typed_name (const char *name, const char *types,
                    return s;
                }
            }
-         else if (! strcmp (s->sel_types, types))
+         else if (sel_types_match (s->sel_types, types))
            {
              if (orig)
                {