From 392202b07dd6733e8adf84fecf439fb317dfcc2a Mon Sep 17 00:00:00 2001 From: Tom Wood Date: Thu, 22 Apr 1993 11:48:29 +0000 Subject: [PATCH] *** empty log message *** From-SVN: r4192 --- gcc/c-typeck.c | 30 ++++++++---------------------- gcc/objc/objc-act.c | 29 ++++++++++++++++++----------- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index c0443de5f70..bf2e56be6f6 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -461,7 +461,8 @@ comptypes (type1, type2) } case RECORD_TYPE: - return maybe_objc_comptypes (t1, t2, 0); + if (maybe_objc_comptypes (t1, t2, 0) == 1) + return 1; } return 0; } @@ -473,29 +474,14 @@ static int comp_target_types (ttl, ttr) tree ttl, ttr; { - int val = 0; - - if (doing_objc_thang) - { - /* Give maybe_objc_comptypes a crack at letting these types through. */ - val = maybe_objc_comptypes (ttl, ttr, 1); + int val; - if (val != 1 && !pedantic) - { - /* Ignore pointer qualifiers recursively. This way char ** - and const char ** are compatible. */ - if (TREE_CODE (ttl) == POINTER_TYPE - && TREE_CODE (ttr) == POINTER_TYPE) - return comp_target_types (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)), - TYPE_MAIN_VARIANT (TREE_TYPE (ttr))); - else - return comptypes (ttl, ttr); - } - } + /* Give maybe_objc_comptypes a crack at letting these types through. */ + if (val = maybe_objc_comptypes (ttl, ttr, 1) >= 0) + return val; - if (val != 1) - val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)), - TYPE_MAIN_VARIANT (TREE_TYPE (ttr))); + val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)), + TYPE_MAIN_VARIANT (TREE_TYPE (ttr))); if (val == 2 && pedantic) pedwarn ("types are not quite compatible"); diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index d2cb9609bac..ec4cf3c9238 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -577,15 +577,17 @@ define_decl (declarator, declspecs) return decl; } -/* Rules for statically typed objects. Called from comptypes, - convert_for_assignment, and comp_target_types. +/* 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. When the operation is + REFLEXIVE, check for compatibility in either direction. - An assignment of the form `a' = `b' is permitted if: + For statically typed objects, an assignment of the form `a' = `b' + is permitted if: - - `a' is of type "id". - - `a' and `b' are the same class type. - - `a' and `b' are of class types A and B such that B is a descendant - of A. */ + `a' is of type "id", + `a' and `b' are the same class type, or + `a' and `b' are of class types A and B such that B is a descendant of A. */ int maybe_objc_comptypes (lhs, rhs, reflexive) @@ -594,7 +596,7 @@ maybe_objc_comptypes (lhs, rhs, reflexive) { if (doing_objc_thang) return objc_comptypes (lhs, rhs, reflexive); - return 0; + return -1; } static tree @@ -662,6 +664,11 @@ lookup_protocol_in_reflist (rproto_list, lproto) return 0; } +/* 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. When the operation + is REFLEXIVE, check for compatibility in either direction. */ + int objc_comptypes (lhs, rhs, reflexive) tree lhs; @@ -752,12 +759,12 @@ objc_comptypes (lhs, rhs, reflexive) return 1; /* one of the types is a protocol */ } else - return 2; /* defer to comptypes */ + return -1; /* defer to comptypes */ } else if (TREE_CODE (lhs) == RECORD_TYPE && TREE_CODE (rhs) == RECORD_TYPE) ; /* fall thru...this is the case we have been handling all along */ else - return 2; /* defer to comptypes */ + return -1; /* defer to comptypes */ /* End of new protocol support. */ @@ -803,7 +810,7 @@ objc_comptypes (lhs, rhs, reflexive) return 0; } else - return 0; + return -1; /* defer to comptypes */ } /* Called from c-decl.c before all calls to rest_of_decl_compilation. */ -- 2.30.2