typeck.c (build_c_cast): Preserve the cast if casting to and from an Objective-C...
authorZiemowit Laski <zlaski@apple.com>
Fri, 10 Sep 2004 06:40:15 +0000 (06:40 +0000)
committerZiemowit Laski <zlaski@gcc.gnu.org>
Fri, 10 Sep 2004 06:40:15 +0000 (06:40 +0000)
[gcc/cp/ChangeLog]
2004-09-09  Ziemowit Laski  <zlaski@apple.com>

        * typeck.c (build_c_cast): Preserve the cast if casting
        to and from an Objective-C type.

From-SVN: r87277

gcc/cp/ChangeLog
gcc/cp/typeck.c

index 43c58aa5ed021fa7d15ed9eb6c31f9f6441e53f5..08b32a26a655758ce5e4bd33d5c382927b23595b 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-09  Ziemowit Laski  <zlaski@apple.com>
+
+       * typeck.c (build_c_cast): Preserve the cast if casting
+       to and from an Objective-C type.
+
 2004-09-09  Ziemowit Laski  <zlaski@apple.com>
 
        * Make-lang.in (cp/typeck.o): Depend on c-common.h.
index 94e903db1c8f2e1772b9908262d6226fff11f1c1..f4d1679557ae59f6a1598bb4a9b3515ef25d010c 100644 (file)
@@ -4829,6 +4829,13 @@ build_c_cast (tree type, tree expr)
       return t;
     }
 
+  /* Casts to a (pointer to a) specific ObjC class (or 'id' or
+     'Class') should always be retained, because this information aids
+     in method lookup.  */
+  if (objc_is_object_ptr (type)
+      && objc_is_object_ptr (TREE_TYPE (expr)))
+    return build_nop (type, expr);
+
   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
   if (TREE_CODE (type) != REFERENCE_TYPE