diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e72bca41ce3..484e34014c9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-10-22 Richard Guenther + + * tree.def (COMPLEX_TYPE): Constrain element type. + * tree.c (build_complex_type): Assert that. + * tree-ssa-structalias.c (could_have_pointers): Complex types + cannot have pointers. + 2008-10-22 Manuel López-Ibáñez PR c/30949 diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 6db829808d8d..11427ec69e20 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -2765,8 +2765,7 @@ could_have_pointers (tree t) tree type = TREE_TYPE (t); if (POINTER_TYPE_P (type) - || AGGREGATE_TYPE_P (type) - || TREE_CODE (type) == COMPLEX_TYPE) + || AGGREGATE_TYPE_P (type)) return true; return false; diff --git a/gcc/tree.c b/gcc/tree.c index 925eafe05061..10b50d121dcd 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -6168,6 +6168,10 @@ build_complex_type (tree component_type) tree t; hashval_t hashcode; + gcc_assert (INTEGRAL_TYPE_P (component_type) + || SCALAR_FLOAT_TYPE_P (component_type) + || FIXED_POINT_TYPE_P (component_type)); + /* Make a node of the sort we want. */ t = make_node (COMPLEX_TYPE); diff --git a/gcc/tree.def b/gcc/tree.def index bde59b7016ce..3e077cc2cd7a 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -186,7 +186,8 @@ DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0) compiler. COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE. */ /* Complex number types. The TREE_TYPE field is the data type - of the real and imaginary parts. */ + of the real and imaginary parts. It must be of scalar + arithmetic type, not including pointer type. */ DEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0) /* Vector types. The TREE_TYPE field is the data type of the vector