From: Per Bothner Date: Fri, 7 Jun 1996 19:11:44 +0000 (-0700) Subject: * expr.c (safe_from_p): Allow Chill-style variable-sized arrays. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8f6562d026def4d1010e5beb0d4b5afaf0703a9c;p=gcc.git * expr.c (safe_from_p): Allow Chill-style variable-sized arrays. From-SVN: r12213 --- 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;