aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2011-05-20 19:57:52 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2011-05-20 19:57:52 +0000
commit769b55b24fa8db8cbe084203d2ed4354bbb6b060 (patch)
tree81929bef88ad47d8accd79f31dc83c413380fe1a /gcc/objc
parente6450c11b26d746328554ba8041577e173fad8f1 (diff)
downloadgcc-769b55b24fa8db8cbe084203d2ed4354bbb6b060.zip
gcc-769b55b24fa8db8cbe084203d2ed4354bbb6b060.tar.gz
gcc-769b55b24fa8db8cbe084203d2ed4354bbb6b060.tar.bz2
remove some TYPE_ARG_TYPES usage in objc/
remove some TYPE_ARG_TYPES usage in objc/ * objc-act.c (objc_compare_types): Use function_args_iterator instead of TYPE_ARG_TYPES to compare function argument types. From-SVN: r173977
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/ChangeLog5
-rw-r--r--gcc/objc/objc-act.c31
2 files changed, 29 insertions, 7 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 949b92d..1b2bb35 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-20 Nathan Froyd <froydnj@codesourcery.com>
+
+ * objc-act.c (objc_compare_types): Use function_args_iterator
+ instead of TYPE_ARG_TYPES to compare function argument types.
+
2011-05-13 Toon Moene <toon@moene.org>
* objc-next-runtime-abi-02.c (newabi_append_ro):
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 7e69b0d..0e15fe5 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -2420,6 +2420,8 @@ objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
lenient than C or C++ on this. */
if (TREE_CODE (ltyp) == FUNCTION_TYPE && TREE_CODE (rtyp) == FUNCTION_TYPE)
{
+ function_args_iterator liter, riter;
+
/* Return types must be covariant. */
if (!comptypes (TREE_TYPE (ltyp), TREE_TYPE (rtyp))
&& !objc_compare_types (TREE_TYPE (ltyp), TREE_TYPE (rtyp),
@@ -2427,16 +2429,31 @@ objc_compare_types (tree ltyp, tree rtyp, int argno, tree callee)
return false;
/* Argument types must be contravariant. */
- for (ltyp = TYPE_ARG_TYPES (ltyp), rtyp = TYPE_ARG_TYPES (rtyp);
- ltyp && rtyp; ltyp = TREE_CHAIN (ltyp), rtyp = TREE_CHAIN (rtyp))
+ function_args_iter_init (&liter, ltyp);
+ function_args_iter_init (&riter, rtyp);
+
+ while (1)
{
- if (!comptypes (TREE_VALUE (rtyp), TREE_VALUE (ltyp))
- && !objc_compare_types (TREE_VALUE (rtyp), TREE_VALUE (ltyp),
- argno, callee))
+ ltyp = function_args_iter_cond (&liter);
+ rtyp = function_args_iter_cond (&riter);
+
+ /* If we've exhaused both lists simulateously, we're done. */
+ if (ltyp == NULL_TREE && rtyp == NULL_TREE)
+ break;
+
+ /* If one list is shorter than the other, they fail to match. */
+ if (ltyp == NULL_TREE || rtyp == NULL_TREE)
return false;
- }
- return (ltyp == rtyp);
+ if (!comptypes (rtyp, ltyp)
+ && !objc_compare_types (rtyp, ltyp, argno, callee))
+ return false;
+
+ function_args_iter_next (&liter);
+ function_args_iter_next (&riter);
+ }
+
+ return true;
}
/* Past this point, we are only interested in ObjC class instances,