diff options
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 504a85d..3861692 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -1360,10 +1360,17 @@ get_range_strlen (tree arg, tree length[2], bitmap *visited, int type, { tree type = TREE_TYPE (TREE_OPERAND (arg, 0)); + /* Determine the "innermost" array type. */ while (TREE_CODE (type) == ARRAY_TYPE && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE) type = TREE_TYPE (type); + /* Avoid arrays of pointers. */ + tree eltype = TREE_TYPE (type); + if (TREE_CODE (type) != ARRAY_TYPE + || !INTEGRAL_TYPE_P (eltype)) + return false; + val = TYPE_SIZE_UNIT (type); if (!val || integer_zerop (val)) return false; |