diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-vect-analyze.c | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dd11e2c..19f8137 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-03-17 Dorit Naishlos <dorit@il.ibm.com> + + PR tree-optimization/20474 + * tree-vect-analyze.c (vect_analyze_pointer_ref_access): Check the + size_type of the relevant pointer. Check for COMPLETE_TYPE_P. + 2005-03-17 Kazu Hirata <kazu@cs.umass.edu> * config/h8300/h8300-protos.h: Remove prototypes for diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c index 0ee6f0c..dd9342a 100644 --- a/gcc/tree-vect-analyze.c +++ b/gcc/tree-vect-analyze.c @@ -1401,8 +1401,7 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read, return NULL; } - reftype = TREE_TYPE (init); - if (!POINTER_TYPE_P (reftype)) + if (!POINTER_TYPE_P (TREE_TYPE (init))) { if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS, LOOP_LOC (loop_vinfo))) @@ -1412,6 +1411,14 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read, *ptr_step = fold_convert (ssizetype, step); innertype = TREE_TYPE (reftype); + if (!COMPLETE_TYPE_P (innertype)) + { + if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS, + LOOP_LOC (loop_vinfo))) + fprintf (vect_dump, "not vectorized: pointer to incomplete type."); + return NULL; + } + /* Check that STEP is a multiple of type size. */ if (!integer_zerop (size_binop (TRUNC_MOD_EXPR, *ptr_step, fold_convert (ssizetype, TYPE_SIZE_UNIT (innertype))))) |