aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family/array-notation-common.c
diff options
context:
space:
mode:
authorIgor Zamyatin <igor.zamyatin@intel.com>2014-08-12 12:27:41 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2014-08-12 12:27:41 +0000
commitcd4e76fcea6391ceb0136cffaea0672080f9eb17 (patch)
tree8d32aa013c8b59a796e698089dc640265c19aa7d /gcc/c-family/array-notation-common.c
parent7955b06580a73bd6ad0d744928ab4775e4723c78 (diff)
downloadgcc-cd4e76fcea6391ceb0136cffaea0672080f9eb17.zip
gcc-cd4e76fcea6391ceb0136cffaea0672080f9eb17.tar.gz
gcc-cd4e76fcea6391ceb0136cffaea0672080f9eb17.tar.bz2
re PR other/61962 (GCC seems to enter an infinite loop when compiling the above cilk+ code.)
PR other/61962 gcc/c-family/ * array-notation-common.c (find_rank): Added handling for other types of references. testsuite/ * c-c++-common/cilk-plus/AN/pr61962.c: New test. From-SVN: r213858
Diffstat (limited to 'gcc/c-family/array-notation-common.c')
-rw-r--r--gcc/c-family/array-notation-common.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/c-family/array-notation-common.c b/gcc/c-family/array-notation-common.c
index 84f6f45..f8bce04 100644
--- a/gcc/c-family/array-notation-common.c
+++ b/gcc/c-family/array-notation-common.c
@@ -221,11 +221,14 @@ find_rank (location_t loc, tree orig_expr, tree expr, bool ignore_builtin_fn,
current_rank++;
ii_tree = ARRAY_NOTATION_ARRAY (ii_tree);
}
- else if (TREE_CODE (ii_tree) == ARRAY_REF)
+ else if (handled_component_p (ii_tree)
+ || TREE_CODE (ii_tree) == INDIRECT_REF)
ii_tree = TREE_OPERAND (ii_tree, 0);
else if (TREE_CODE (ii_tree) == PARM_DECL
|| TREE_CODE (ii_tree) == VAR_DECL)
break;
+ else
+ gcc_unreachable ();
}
if (*rank == 0)
/* In this case, all the expressions this function has encountered thus