OSDN Git Service

PR tree-optimization/18663
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Feb 2005 07:27:14 +0000 (07:27 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Feb 2005 07:27:14 +0000 (07:27 +0000)
* tree-ssa-dom.c (extract_range_from_cond): Return 0
if the type has variable bounds.

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

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

index 881f157..f807935 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR tree-optimization/18663
+       * tree-ssa-dom.c (extract_range_from_cond): Return 0
+       if the type has variable bounds.
+
 2005-02-20  Kazu Hirata  <kazu@cs.umass.edu>
 
        * gcse.c: Remove an obsolete comment.
index 0d34ea2..88c7f92 100644 (file)
@@ -3189,16 +3189,19 @@ extract_range_from_cond (tree cond, tree *hi_p, tree *lo_p, int *inverted_p)
   tree op1 = TREE_OPERAND (cond, 1);
   tree high, low, type;
   int inverted;
-  
+
+  type = TREE_TYPE (op1);
+
   /* Experiments have shown that it's rarely, if ever useful to
      record ranges for enumerations.  Presumably this is due to
      the fact that they're rarely used directly.  They are typically
      cast into an integer type and used that way.  */
-  if (TREE_CODE (TREE_TYPE (op1)) != INTEGER_TYPE)
+  if (TREE_CODE (type) != INTEGER_TYPE
+      /* We don't know how to deal with types with variable bounds.  */
+      || TREE_CODE (TYPE_MIN_VALUE (type)) != INTEGER_CST
+      || TREE_CODE (TYPE_MAX_VALUE (type)) != INTEGER_CST)
     return 0;
 
-  type = TREE_TYPE (op1);
-
   switch (TREE_CODE (cond))
     {
     case EQ_EXPR: