OSDN Git Service

2006-02-23 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Feb 2006 16:03:47 +0000 (16:03 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Feb 2006 16:03:47 +0000 (16:03 +0000)
PR middle-end/26439
* tree-ssa-structalias.c (find_func_aliases): Handle complex types
like aggregate types.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111389 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-structalias.c

index 2b327b9..b04c578 100644 (file)
@@ -1,3 +1,9 @@
+2006-02-23  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/26439
+       * tree-ssa-structalias.c (find_func_aliases): Handle complex types
+       like aggregate types.
+
 2006-02-23  Jakub Jelinek  <jakub@redhat.com>
 
        * configure.ac: Add --with{,out}-long-double-128 configure option.
 2006-02-23  Jakub Jelinek  <jakub@redhat.com>
 
        * configure.ac: Add --with{,out}-long-double-128 configure option.
index e7a9892..3dac076 100644 (file)
@@ -3223,7 +3223,8 @@ find_func_aliases (tree origt)
       /* Only care about pointers and structures containing
         pointers.  */
       if (POINTER_TYPE_P (TREE_TYPE (PHI_RESULT (t)))
       /* Only care about pointers and structures containing
         pointers.  */
       if (POINTER_TYPE_P (TREE_TYPE (PHI_RESULT (t)))
-         || AGGREGATE_TYPE_P (TREE_TYPE (PHI_RESULT (t))))
+         || AGGREGATE_TYPE_P (TREE_TYPE (PHI_RESULT (t)))
+         || TREE_CODE (TREE_TYPE (PHI_RESULT (t))) == COMPLEX_TYPE)
        {
          int i;
          unsigned int j;
        {
          int i;
          unsigned int j;
@@ -3241,7 +3242,8 @@ find_func_aliases (tree origt)
              get_constraint_for (PHI_ARG_DEF (t, i), &rhsc);
 
              if (TREE_CODE (strippedrhs) == ADDR_EXPR
              get_constraint_for (PHI_ARG_DEF (t, i), &rhsc);
 
              if (TREE_CODE (strippedrhs) == ADDR_EXPR
-                && AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+                && (AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+                    || TREE_CODE (TREE_TYPE (rhstype)) == COMPLEX_TYPE)
                 && VEC_length (ce_s, rhsc) == 1)
                {
                  struct constraint_expr *origrhs;
                 && VEC_length (ce_s, rhsc) == 1)
                {
                  struct constraint_expr *origrhs;
@@ -3384,8 +3386,10 @@ find_func_aliases (tree origt)
       tree rhsop = TREE_OPERAND (t, 1);
       int i;
 
       tree rhsop = TREE_OPERAND (t, 1);
       int i;
 
-      if (AGGREGATE_TYPE_P (TREE_TYPE (lhsop)) 
-         && AGGREGATE_TYPE_P (TREE_TYPE (rhsop)))
+      if ((AGGREGATE_TYPE_P (TREE_TYPE (lhsop)) 
+          || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE)
+         && (AGGREGATE_TYPE_P (TREE_TYPE (rhsop))
+             || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE))
        {
          do_structure_copy (lhsop, rhsop);
        }
        {
          do_structure_copy (lhsop, rhsop);
        }
@@ -3395,6 +3399,7 @@ find_func_aliases (tree origt)
             containing pointers, dereferences, and call expressions.  */
          if (POINTER_TYPE_P (TREE_TYPE (lhsop))
              || AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
             containing pointers, dereferences, and call expressions.  */
          if (POINTER_TYPE_P (TREE_TYPE (lhsop))
              || AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
+             || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE
              || TREE_CODE (rhsop) == CALL_EXPR)
            {
              get_constraint_for (lhsop, &lhsc);
              || TREE_CODE (rhsop) == CALL_EXPR)
            {
              get_constraint_for (lhsop, &lhsc);
@@ -3421,7 +3426,8 @@ find_func_aliases (tree origt)
                        
                        get_constraint_for (rhsop, &rhsc);
                        if (TREE_CODE (strippedrhs) == ADDR_EXPR
                        
                        get_constraint_for (rhsop, &rhsc);
                        if (TREE_CODE (strippedrhs) == ADDR_EXPR
-                           && AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+                           && (AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+                               || TREE_CODE (TREE_TYPE (rhstype)) == COMPLEX_TYPE)
                            && VEC_length (ce_s, rhsc) == 1)
                          {
                            struct constraint_expr *origrhs;
                            && VEC_length (ce_s, rhsc) == 1)
                          {
                            struct constraint_expr *origrhs;