diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2006-06-08 02:53:25 +0000 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2006-06-08 02:53:25 +0000 |
| commit | cad27cdc2ea46ec401b71b76a92fcf3bc1d094e0 (patch) | |
| tree | 728f5aa7f63dc38a6788e989bf8b1fd14a359b66 /src/expr.c | |
| parent | Don't claim x86 behavior is erroneous in a comment. (diff) | |
| download | coreutils-cad27cdc2ea46ec401b71b76a92fcf3bc1d094e0.tar.gz coreutils-cad27cdc2ea46ec401b71b76a92fcf3bc1d094e0.zip | |
(eval4): Detect overflow properly when multiplying INTMAX_MIN * -1.
Diffstat (limited to 'src/expr.c')
| -rw-r--r-- | src/expr.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/expr.c b/src/expr.c index 7b5c77be6..e0510fc10 100644 --- a/src/expr.c +++ b/src/expr.c @@ -640,7 +640,9 @@ eval4 (bool evaluate) if (fxn == multiply) { val = l->u.i * r->u.i; - if (! (l->u.i == 0 || val / l->u.i == r->u.i)) + if (! (l->u.i == 0 || r->u.i == 0 + || ((val < 0) == ((l->u.i < 0) ^ (r->u.i < 0)) + && val / l->u.i == r->u.i))) integer_overflow ('*'); } else |
