[Bug c++/51549] New: QList::operator[] crash in 32bit release version on MacOS for gcc 4.2.1
sami.lehtonen at digia dot com
gcc-bugzilla@gcc.gnu.org
Wed Dec 14 07:45:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51549
Bug #: 51549
Summary: QList::operator[] crash in 32bit release version on
MacOS for gcc 4.2.1
Classification: Unclassified
Product: gcc
Version: 4.2.1
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: sami.lehtonen@digia.com
Created attachment 26076
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26076
Example application to reproduce the issue
There is a bug in the way how gcc optimizes QList::operator[] so that it leads
to a crash on MacOS.
Detailed description:
This can be reproduced only when building a release version of the application
with Qt 4.7.3 (or newer, we didn't tried with older Qt versions) to MacOS
Carbon or 32bit Cocoa. One of our testing computer (to reproduce the issue) is
running with Xcode 3.2.6 (containing gcc 4.2.1 Apple build 5666) and MacOS
10.6.8. The problem will also be visible if you let qmake generate a Xcode
project rather than a Makefile.
This cannot be reproduced with debug version in Carbon/32bit Cocoa. And this
cannot be reproduced at all if building to 64bit Cocoa. Also, this cannot be
reproduced if using the flag -fno-tree-vrp in gcc or if building with llvm-gcc.
When using Qt 4.5.3, Xcode 3.1.4 (containing gcc 4.0.1 Apple build 5493) on
MacOS 10.5.8 this cannot be reproduced. We haven't been able to reproduced this
on Windows/Linux computers.
Other information:
The QList::operator[] is compiled as "inline" for the release version. When
building for the debug version the functionality is not compiled inline and
there are no crashes observed.
Workaround:
Use QList::value() instead of QList::operator[]
Note: QList::value() is neither compiled as inline for debug nor for release
version.
Example code to reproduce the problem:
Build the attached example application with:
qmake -spec macx-g++
make
Start the application:
./testQListAccess.app/Contents/MacOS/testQListAccess
-> crash in CPoint::x() because the reference to this object which was passed
by QList::operator[] is wrong.
You can deactivate in the example code in the file testQListAccess.cpp the line
138 where the QList::operator[] is used and activate the code part at line 140
which is using QList::value(). With this "workaround" the application will run.
More information about the Gcc-bugs
mailing list