From: Alexander Malmberg Date: Tue, 25 Jan 2005 03:13:10 +0000 (+0000) Subject: re PR objc/18408 (ICE compiling code that involves casting classes) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f16185feb0636509d9f865e624c4c3712273cc4;p=gcc.git re PR objc/18408 (ICE compiling code that involves casting classes) 2005-01-25 Alexander Malmberg 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 --- diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 42e91fa6d5a..bdd79fe3b8f 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,10 @@ +2005-01-25 Alexander Malmberg + + 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 * objc-act.c (objc_push_parm): Call c_type_promotes_to() diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 65af654cb5d..fff747bf29d 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -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 diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index e52e0f003fb..403c31b16a9 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -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. */ diff --git a/gcc/objc/objc-lang.c b/gcc/objc/objc-lang.c index 2d8319d2417..e83ffda4b36 100644 --- a/gcc/objc/objc-lang.c +++ b/gcc/objc/objc-lang.c @@ -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;