OSDN Git Service

* tree.c (variably_modified_type_p) <ARRAY_TYPE>: Return true
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 May 2006 13:11:09 +0000 (13:11 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 May 2006 13:11:09 +0000 (13:11 +0000)
if the element type is variably modified without recursing.

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

gcc/ChangeLog
gcc/tree.c

index 4ecc27a..1f1f7fd 100644 (file)
@@ -1,3 +1,8 @@
+2006-05-17  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree.c (variably_modified_type_p) <ARRAY_TYPE>: Return true
+       if the element type is variably modified without recursing.
+
 2006-05-17  Sebastian Pop  <pop@cri.ensmp.fr>
 
        PR middle-end/27332
index 207df84..049ec09 100644 (file)
@@ -5635,13 +5635,12 @@ variably_modified_type_p (tree type, tree fn)
      When a representation is chosen, this function should be modified
      to test for that case as well.  */
   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
-  RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT(type));
+  RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
 
   switch (TREE_CODE (type))
     {
     case POINTER_TYPE:
     case REFERENCE_TYPE:
-    case ARRAY_TYPE:
     case VECTOR_TYPE:
       if (variably_modified_type_p (TREE_TYPE (type), fn))
        return true;
@@ -5690,6 +5689,13 @@ variably_modified_type_p (tree type, tree fn)
          }
        break;
 
+    case ARRAY_TYPE:
+      /* Do not call ourselves to avoid infinite recursion.  This is
+        variably modified if the element type is.  */
+      RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
+      RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
+      break;
+
     default:
       break;
     }