From ee167207599d4c21b0962538fecf1269f7d1e980 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 21 Feb 2005 08:27:14 +0100 Subject: [PATCH] re PR tree-optimization/18663 (ACATS ICE cc1221d expected integer_cst, have nop_expr in tree_int_cst_lt, at tree.c:3779) PR tree-optimization/18663 * tree-ssa-dom.c (extract_range_from_cond): Return 0 if the type has variable bounds. From-SVN: r95320 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-dom.c | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 881f157122f9..f807935067fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-02-21 Eric Botcazou + + 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 * gcse.c: Remove an obsolete comment. diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 0d34ea22fcfe..88c7f92fd4bb 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -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: -- 2.47.2