aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-02-25 18:32:13 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-02-25 18:32:13 -0500
commitafb52ee70158e214291ccebba1e3da777c3e3267 (patch)
tree33644245828af0043d5686efe5dbba1f67f42a57 /gcc
parentda4c17179b3fcd19b1c9b87067f9a640de85b592 (diff)
downloadgcc-afb52ee70158e214291ccebba1e3da777c3e3267.zip
gcc-afb52ee70158e214291ccebba1e3da777c3e3267.tar.gz
gcc-afb52ee70158e214291ccebba1e3da777c3e3267.tar.bz2
(substitute_in_type, case REAL_TYPE): Allow TYPE_{MIN,MAX}_VALUE to be
unassigned. From-SVN: r6626
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 40bebf7..8d2df27 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2117,14 +2117,19 @@ substitute_in_type (t, f, r)
return t;
case REAL_TYPE:
- if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST
+ if ((TYPE_MIN_VALUE (t) != 0
+ && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST
&& contains_placeholder_p (TYPE_MIN_VALUE (t)))
- || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST
+ || (TYPE_MAX_VALUE (t) != 0
+ && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST
&& contains_placeholder_p (TYPE_MAX_VALUE (t))))
{
- t = build_type_copy (t);
- TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
- TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
+ t = copy_type (t);
+
+ if (TYPE_MIN_VALUE (t))
+ TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
+ if (TYPE_MAX_VALUE (t))
+ TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
}
return t;