[Bug lto/87434] New: LTO corrupts code
kelvin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 25 16:56:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87434
Bug ID: 87434
Summary: LTO corrupts code
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
Assignee: unassigned at gcc dot gnu.org
Reporter: kelvin at gcc dot gnu.org
CC: marxin at gcc dot gnu.org
Target Milestone: ---
Created attachment 44748
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44748&action=edit
reproducer source code including draft patch
In the attached sample program, the code generated for the following loop is
corrupted by the lto pass.
for (i = 0; i < N; i++)
{
/* the -flto optimization corrupts the following assignments. */
dst[i] = 0;
src[i] = i;
}
When -flto optimization is enabled, the loop behaves as if it had been written
as shown below, with the source values swapped during assignments to the
respective array slots:
for (i = 0; i < N; i++)
{
dst[i] = i;
src[i] = 0;
}
This problem has only been seen in the context of a draft patch which has the
effect of replacing Power X-form addresses with D-form addresses, also
attached. In this particular test program, the compiler discovers that src is
512 bytes from dst, and uses the same pointer for both assignments, using a
512-byte immediate-mode offset to distinguish the two assignments.
Draft patch and test programs are attached.
More information about the Gcc-bugs
mailing list