Fix x86 memset bug, reported by Karl Guenter Wuensch.
* expr.c (expand_builtin, case BUILT_IN_MEMSET): Break if either val or len has TREE_SIDE_EFFECTS set. From-SVN: r19471
This commit is contained in:
parent
2cea586a7e
commit
bf931ec829
@ -1,5 +1,8 @@
|
||||
Tue Apr 28 17:53:33 1998 Jim Wilson <wilson@cygnus.com>
|
||||
|
||||
* expr.c (expand_builtin, case BUILT_IN_MEMSET): Break if either
|
||||
val or len has TREE_SIDE_EFFECTS set.
|
||||
|
||||
* sparc.md (mulsidi3): Call const v8plus and v8plus routines.
|
||||
(mulsidi3_v8plus, const_mulsidi3_v8plus): Delete asterisk from name.
|
||||
(smuldi3_highpart): Call const v8plus routine.
|
||||
|
@ -8609,6 +8609,15 @@ expand_builtin (exp, target, subtarget, mode, ignore)
|
||||
if (dest_align == 0)
|
||||
break;
|
||||
|
||||
/* If the arguments have side-effects, then we can only evaluate
|
||||
them at most once. The following code evaluates them twice if
|
||||
they are not constants because we break out to expand_call
|
||||
in that case. They can't be constants if they have side-effects
|
||||
so we can check for that first. Alternatively, we could call
|
||||
save_expr to make multiple evaluation safe. */
|
||||
if (TREE_SIDE_EFFECTS (val) || TREE_SIDE_EFFECTS (len))
|
||||
break;
|
||||
|
||||
/* If VAL is not 0, don't do this operation in-line. */
|
||||
if (expand_expr (val, NULL_RTX, VOIDmode, 0) != const0_rtx)
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user