aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-08-17 20:14:18 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-08-17 18:14:18 +0000
commit5945bebf44217c25eb47124b66823df7f1ddcb3d (patch)
tree7420acbccb1aaf6b9fc6cba0db0d8aee83d75a18 /gcc
parentf4fca9d48101c0a7e6073fb280e65f976f582811 (diff)
downloadgcc-5945bebf44217c25eb47124b66823df7f1ddcb3d.zip
gcc-5945bebf44217c25eb47124b66823df7f1ddcb3d.tar.gz
gcc-5945bebf44217c25eb47124b66823df7f1ddcb3d.tar.bz2
re PR middle-end/58179 (obj_type_ref ICE building libobjc)
PR middle-end/58179 * tree.c (obj_type_ref_class): Do not ICE on non-method calls. From-SVN: r201817
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 66048e1..6462a05 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-08-16 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/58179
+ * tree.c (obj_type_ref_class): Do not ICE on non-method calls.
+
2013-08-16 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/rs6000.md (rs6000_get_timebase_ppc32): Add length
diff --git a/gcc/tree.c b/gcc/tree.c
index 9480c73..8b4d865 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -11873,7 +11873,11 @@ obj_type_ref_class (tree ref)
ref = TREE_TYPE (ref);
gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
ref = TREE_TYPE (ref);
- gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE);
+ /* We look for type THIS points to. ObjC also builds
+ OBJ_TYPE_REF with non-method calls, Their first parameter
+ ID however also corresponds to class type. */
+ gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
+ || TREE_CODE (ref) == FUNCTION_TYPE);
ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
return TREE_TYPE (ref);