From 8f6562d026def4d1010e5beb0d4b5afaf0703a9c Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Fri, 7 Jun 1996 12:11:44 -0700 Subject: [PATCH] * expr.c (safe_from_p): Allow Chill-style variable-sized arrays. From-SVN: r12213 --- gcc/expr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index c39c190f843..9bda758497b 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4466,12 +4466,17 @@ safe_from_p (x, exp) if (x == 0 /* If EXP has varying size, we MUST use a target since we currently - have no way of allocating temporaries of variable size. So we - assume here that something at a higher level has prevented a + have no way of allocating temporaries of variable size + (except for arrays that have TYPE_ARRAY_MAX_SIZE set). + So we assume here that something at a higher level has prevented a clash. This is somewhat bogus, but the best we can do. Only do this when X is BLKmode. */ || (TREE_TYPE (exp) != 0 && TYPE_SIZE (TREE_TYPE (exp)) != 0 && TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) != INTEGER_CST + && (TREE_CODE (TREE_TYPE (exp)) != ARRAY_TYPE + || TYPE_ARRAY_MAX_SIZE (TREE_TYPE (exp)) == NULL_TREE + || TREE_CODE (TYPE_ARRAY_MAX_SIZE (TREE_TYPE (exp))) + != INTEGER_CST) && GET_MODE (x) == BLKmode)) return 1; -- 2.30.2