re PR objc/18408 (ICE compiling code that involves casting classes)

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
This commit is contained in:
Alexander Malmberg 2005-01-25 03:13:10 +00:00 committed by Andrew Pinski
parent a6d2976a97
commit 3f16185feb
4 changed files with 32 additions and 0 deletions

View 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()

View 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

View 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. */

View 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;