]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR objc/18408 (ICE compiling code that involves casting classes)
authorAlexander Malmberg <alexander@malmberg.org>
Tue, 25 Jan 2005 03:13:10 +0000 (03:13 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 25 Jan 2005 03:13:10 +0000 (19:13 -0800)
2005-01-25  Alexander Malmberg  <alexander@malmberg.org>

        PR objc/18408
        * objc-act.c (objc_types_compatible_p): New function.
        * objc-act.h (objc_types_compatible_p): Declare.
        * objc-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Define.

From-SVN: r94199

gcc/objc/ChangeLog
gcc/objc/objc-act.c
gcc/objc/objc-act.h
gcc/objc/objc-lang.c

index 42e91fa6d5adf33c3bd43e78b7f6ca5a10bc732c..bdd79fe3b8fc14b3d370af5733151035533c20b2 100644 (file)
@@ -1,3 +1,10 @@
+2005-01-25  Alexander Malmberg  <alexander@malmberg.org>
+
+       PR objc/18408
+       * objc-act.c (objc_types_compatible_p): New function.
+       * objc-act.h (objc_types_compatible_p): Declare.
+       * objc-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Define.
+
 2005-01-16  Ziemowit Laski  <zlaski@apple.com>
 
        * objc-act.c (objc_push_parm): Call c_type_promotes_to()
index 65af654cb5d1d88084cd36d2fa1555703d76d03a..fff747bf29d52300ffa32102c559f44b105de78a 100644 (file)
@@ -73,6 +73,7 @@ Boston, MA 02111-1307, USA.  */
 #include "tree-iterator.h"
 #include "libfuncs.h"
 #include "hashtab.h"
+#include "langhooks-def.h"
 
 #define OBJC_VOID_AT_END       void_list_node
 
@@ -836,6 +837,27 @@ objc_is_class_id (tree type)
   return OBJC_TYPE_NAME (type) == objc_class_id;
 }
 
+
+int
+objc_types_compatible_p (tree type1, tree type2)
+{
+
+  if (objc_is_object_ptr (type1) || objc_is_object_ptr (type2)
+      || objc_is_class_name (type1) || objc_is_class_name (type2))
+    {
+      return lhd_types_compatible_p (type1, type2);
+    }
+  else
+    {
+#ifdef OBJCPLUS
+      return cxx_types_compatible_p (type1, type2);
+#else
+      return c_types_compatible_p (type1, type2);
+#endif
+    }
+}
+
+
 /* Return 1 if LHS and RHS are compatible types for assignment or
    various other operations.  Return 0 if they are incompatible, and
    return -1 if we choose to not decide (because the types are really
index e52e0f003fbeb415081417fa182fc97b4335fa07..403c31b16a9a802c3b299a08cd1b474bff3d037f 100644 (file)
@@ -28,6 +28,7 @@ bool objc_init (void);
 const char *objc_printable_name (tree, int);
 void objc_finish_file (void);
 tree objc_fold_obj_type_ref (tree, tree);
+int objc_types_compatible_p (tree, tree);
 
 /* NB: The remaining public functions are prototyped in c-common.h, for the
    benefit of stub-objc.c and objc-act.c.  */
index 2d8319d2417a77af7a5f3f895646b7a653ec5f11..e83ffda4b3608b310d8807389a091e1eab2d6700 100644 (file)
@@ -45,6 +45,8 @@ enum c_language_kind c_language = clk_objc;
 #define LANG_HOOKS_INIT objc_init
 #undef LANG_HOOKS_DECL_PRINTABLE_NAME
 #define LANG_HOOKS_DECL_PRINTABLE_NAME objc_printable_name
+#undef LANG_HOOKS_TYPES_COMPATIBLE_P
+#define LANG_HOOKS_TYPES_COMPATIBLE_P objc_types_compatible_p
 
 /* Each front end provides its own lang hook initializer.  */
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;