* flags.h (flag_wrapv): New flag controlling overflow semantics.
commitb24bee039721e7304575c4c0b93bb1601dd63463
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 May 2003 13:23:32 +0000 (31 13:23 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 May 2003 13:23:32 +0000 (31 13:23 +0000)
treeae8dcbb261aaadbfa874d60f1fccd8dd93248b50
parent7bfd46d1db1b9ad908c67e722ca2e3221481c938
* flags.h (flag_wrapv): New flag controlling overflow semantics.
* toplev.c (flag_wrapv): Declare the variable with default false.
(lang_independent_options): New option "-fwrapv" to set the above.

* fold-const.c (extract_muldiv_1): Disable optimization of (2*x)/2
as x, when signed arithmetic overflow wraps around.
(fold): Optimize "-A - B" as "-B - A" if overflow wraps around.
* loop.c (basic_induction_var): Ignore BIVs that rely on undefined
overflow when flag_wrapv is true.

* java/lang.c (java_init_options): Prescribe wrap-around two's
complement arithmetic overflow by setting flag_wrapv.

* doc/invoke.texi: Document new -fwrapv command line option.
* doc/c-tree.texi: Mention that the overflow semantics of
NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR and MULT_EXPR is dependent
upon both flag_wrapv and flag_trapv.

* gcc.dg/fwrapv-1.c: New test case.
* gcc.dg/fwrapv-2.c: New test case.

* libjava.lang/Overflow.java: New test.
* libjava.lang/Overflow.out: New file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67270 138bc75d-0d04-0410-961f-82ee72b054a4
15 files changed:
gcc/ChangeLog
gcc/doc/c-tree.texi
gcc/doc/invoke.texi
gcc/flags.h
gcc/fold-const.c
gcc/java/ChangeLog
gcc/java/lang.c
gcc/loop.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fwrapv-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/fwrapv-2.c [new file with mode: 0644]
gcc/toplev.c
libjava/testsuite/ChangeLog
libjava/testsuite/libjava.lang/Overflow.java [new file with mode: 0644]
libjava/testsuite/libjava.lang/Overflow.out [new file with mode: 0644]