GCC modified for the FreeChainXenon project
Find a file
Maciej W. Rozycki 323d010fa5 [PR115565] cse: Don't use a valid regno for non-register in comparison_qty
Use INT_MIN rather than -1 in `comparison_qty' where a comparison is not
with a register, because the value of -1 is actually a valid reference
to register 0 in the case where it has not been assigned a quantity.

Using -1 makes `REG_QTY (REGNO (folded_arg1)) == ent->comparison_qty'
comparison in `fold_rtx' to incorrectly trigger in rare circumstances
and return true for a memory reference, making CSE consider a comparison
operation to evaluate to a constant expression and consequently make the
resulting code incorrectly execute or fail to execute conditional
blocks.

This has caused a miscompilation of rwlock.c from LinuxThreads for the
`alpha-linux-gnu' target, where `rwlock->__rw_writer != thread_self ()'
expression (where `thread_self' returns the thread pointer via a PALcode
call) has been decided to be always true (with `ent->comparison_qty'
using -1 for a reference to to `rwlock->__rw_writer', while register 0
holding the thread pointer retrieved by `thread_self') and code for the
false case has been optimized away where it mustn't have, causing
program lockups.

The issue has been observed as a regression from commit 08a692679f
("Undefined cse.c behaviour causes 3.4 regression on HPUX"),
<https://gcc.gnu.org/ml/gcc-patches/2004-10/msg02027.html>, and up to
commit 932ad4d9b5 ("Make CSE path following use the CFG"),
<https://gcc.gnu.org/ml/gcc-patches/2006-12/msg00431.html>, where CSE
has been restructured sufficiently for the issue not to trigger with the
original reproducer anymore.  However the original bug remains and can
trigger, because `comparison_qty' will still be assigned -1 for a memory
reference and the `reg_qty' member of a `cse_reg_info_table' entry will
still be assigned -1 for register 0 where the entry has not been
assigned a quantity, e.g. at initialization.

Use INT_MIN then as noted above, so that the value remains negative, for
consistency with the REGNO_QTY_VALID_P macro (even though not used on
`comparison_qty'), and then so that it should not ever match a valid
negated register number, fixing the regression with commit 08a692679f.

	gcc/
	PR rtl-optimization/115565
	* cse.cc (record_jump_cond): Use INT_MIN rather than -1 for
	`comparison_qty' if !REG_P.

(cherry picked from commit 69bc5fb97dc3fada81869e00fa65d39f7def6acf)
2024-07-22 10:08:46 +01:00
.github Minor formatting fix for newly-added file from previous commit 2023-11-01 19:28:56 -04:00
c++tools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
config Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
contrib Daily bump. 2024-05-09 11:03:31 +00:00
fixincludes Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
gcc [PR115565] cse: Don't use a valid regno for non-register in comparison_qty 2024-07-22 10:08:46 +01:00
gnattools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
gotools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
include Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
INSTALL
libada Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libatomic Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libbacktrace Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcc1 Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcody Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcpp Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libdecnumber Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libffi Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgcc Daily bump. 2024-06-22 00:24:39 +00:00
libgfortran Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgm2 Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgo libgo: bump libgo version for GCC 14 release 2024-02-05 11:28:30 -08:00
libgomp Daily bump. 2024-05-09 11:03:31 +00:00
libgrust Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libiberty Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libitm Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libobjc Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libphobos Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libquadmath Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libsanitizer Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libssp Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libstdc++-v3 Daily bump. 2024-07-13 00:23:54 +00:00
libvtv Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
lto-plugin Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
maintainer-scripts Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
zlib Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
.dir-locals.el
.gitattributes
.gitignore *: add modern gettext 2023-11-14 00:47:11 +01:00
ABOUT-NLS
ar-lib
ChangeLog Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in LoongArch: Reimplement multilib build option handling. 2023-09-15 10:42:12 +08:00
config.guess
config.rpath
config.sub
configure build: Use of cargo not yet supported here in Canadian cross configurations 2024-04-16 09:43:47 +02:00
configure.ac build: Use of cargo not yet supported here in Canadian cross configurations 2024-04-16 09:43:47 +02:00
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4 Build: fix error in fixinclude configure 2023-11-22 11:54:33 +01:00
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
MAINTAINERS MAINTAINERS: Update my email address 2024-04-04 16:39:52 +02:00
Makefile.def gccrs: Fix missing build dependency 2024-01-16 16:23:02 +01:00
Makefile.in Fix up postboot dependencies [PR106472] 2024-04-02 13:40:27 +02:00
Makefile.tpl Fix up postboot dependencies [PR106472] 2024-04-02 13:40:27 +02:00
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
SECURITY.txt SECURITY.txt: Drop "exploitable" in reference to hardening issues 2024-01-09 10:49:01 -05:00
symlink-tree
test-driver
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.