aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-06-03 19:42:57 +0000
committerRichard Stallman <rms@gnu.org>1992-06-03 19:42:57 +0000
commitdb0e6d01ad5dac14ab89ad75ae723891bcedebcc (patch)
tree2f4db798a76013a9b9a89f49b602fb74d3b6cf54 /gcc
parent80f5b9d8135c93cbec206a232bf78328752029da (diff)
downloadgcc-db0e6d01ad5dac14ab89ad75ae723891bcedebcc.zip
gcc-db0e6d01ad5dac14ab89ad75ae723891bcedebcc.tar.gz
gcc-db0e6d01ad5dac14ab89ad75ae723891bcedebcc.tar.bz2
*** empty log message ***
From-SVN: r1147
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 2f5e680..78193cb 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4858,7 +4858,15 @@ expand_builtin (exp, target, subtarget, mode, ignore)
|| TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != REAL_TYPE)
return CONST0_RTX (TYPE_MODE (TREE_TYPE (exp)));
- /* Compute the argument. */
+ /* Stabilize and compute the argument. */
+ if (TREE_CODE (TREE_VALUE (arglist)) != VAR_DECL
+ && TREE_CODE (TREE_VALUE (arglist)) != PARM_DECL)
+ {
+ exp = copy_node (exp);
+ arglist = copy_node (arglist);
+ TREE_OPERAND (exp, 1) = arglist;
+ TREE_VALUE (arglist) = save_expr (TREE_VALUE (arglist));
+ }
op0 = expand_expr (TREE_VALUE (arglist), subtarget, VOIDmode, 0);
/* Make a suitable register to place result in. */