[Bug 817768] Re: GCC optimizer removes necessary code
kornelix
mikecorn at arcor.de
Mon Aug 8 22:34:47 UTC 2011
I tried to make a small stand-alone test but the test program always
worked. The problem is more involved. Of course my first suspicion was
corruption of memory coming from somewhere else in my program, but this
seems ruled out by the fact that it works fine without optimization and
it works fine when I added the dummy code to reference the variable (ii)
whose code was getting removed. This is all explained in the original
report. My tabular formatting was removed by the bug report utility so
it has to be looked at more carefully.
There were no compiler warnings.
I will try the tests with 4.5 and 4.6 tomorrow.
On 08/08/2011 03:21 PM, Matthias Klose wrote:
> - please recheck with GCC 4.5 and GCC 4.6 in oneiric.
> - please attach a self-contained example, including the command options used
> - include the warnings building the file.
>
> ** Changed in: gcc-defaults (Ubuntu)
> Status: New => Incomplete
>
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-defaults in Ubuntu.
https://bugs.launchpad.net/bugs/817768
Title:
GCC optimizer removes necessary code
Status in “gcc-defaults” package in Ubuntu:
Incomplete
Bug description:
GCC 4.5.2 in Ubuntu 11.04
The program below crashes when compiled with GCC 4.5.2 with optimization
level -O3. This is apparently a bug in GCC.
The crash does not occur if the program is compiled with an earlier
release of GCC, also with -O3 optimization.
The crash does not occur if the program is compiled without
optimization.
The crash does not occur if a do-nothing line of code is added which
makes a reference to the variable involved. Apparently this stops GCC
from optimizing-out necessary code.
Crash matrix
GCC level Optimization dummy code result
4.4.5 -O3 no OK
4.5.2 -O0 no OK
4.5.2 -O3 no crash
4.5.2 -O3 yes OK
There is the crash report from GDB:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000498051 in pvlist_remove (pv=0x306b6fc, ii=<value optimized out>) at zfuncs.cc:1774
1774 pv->list[ii-1] = pv->list[ii];
(gdb) q
Here is the relevant part of the program. The commented line will never
execute the printf() call but it does stop the program from crashing.
struct pvlist {
int max; // max. entries
int act; // actual entries
char **list; // entries
};
pvlist * pvlist_create(int max); // create pvlist
void pvlist_free(pvlist *pv); // free pvlist
int pvlist_append(pvlist *pv, cchar *entry, int unique = 0); // append new entry (opt. if unique)
int pvlist_prepend(pvlist *pv, cchar *entry, int unique = 0); // prepend new entry (opt. if unique)
int pvlist_find(pvlist *pv, cchar *entry); // find entry by name
int pvlist_remove(pvlist *pv, cchar *entry); // remove entry by name
int pvlist_remove(pvlist *pv, int Nth); // remove entry by number (0...)
int pvlist_count(pvlist *pv); // return entry count
int pvlist_replace(pvlist *pv, int Nth, cchar *entry); // replace Nth entry (0...)
char * pvlist_get(pvlist *pv, int Nth); // return Nth entry (0...)
int pvlist_sort(pvlist *pv); // sort list, ascending
// remove an entry by number and repack list
int pvlist_remove(pvlist *pv, int ii)
{
if (ii < 0 || ii >= pv->act) return -1;
zfree(pv->list[ii]);
for (ii++; ii < pv->act; ii++) {
if (! pv->act) printf("meaningless reference %d",ii); // get around GCC optimization bug
pv->list[ii-1] = pv->list[ii];
}
pv->act--;
return 0;
}
ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: gcc 4:4.5.2-1ubuntu3
ProcVersionSignature: Ubuntu 2.6.38-10.46-generic 2.6.38.7
Uname: Linux 2.6.38-10-generic x86_64
NonfreeKernelModules: nvidia
Architecture: amd64
Date: Fri Jul 29 00:00:30 2011
InstallationMedia: Ubuntu 11.04 "Natty Narwhal" - Release amd64 (20110427.1)
ProcEnviron:
LANGUAGE=en_US:en
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: gcc-defaults
UpgradeStatus: No upgrade log present (probably fresh install)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/817768/+subscriptions
More information about the foundations-bugs
mailing list