public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/24075] New: Destructor called with wrong argument after exception with -fcse-follow-jumps -O1
@ 2005-09-27 4:36 flash at pobox dot com
2005-09-27 4:38 ` [Bug rtl-optimization/24075] " flash at pobox dot com
0 siblings, 1 reply; 2+ messages in thread
From: flash at pobox dot com @ 2005-09-27 4:36 UTC (permalink / raw)
To: gcc-bugs
Setup: arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3 built with crosstool-0.29, running on
proprietary ARM hardware. Does not happen with CodeSourcery's 3.4.3 arm-none-linux-gnueabi
2005Q1B, so it's possible that this bug is of historical interest only. On the other hand, I don't have a
non-CodeSourcery crosstool build later than 3.4.1, so I can't be sure it's fixed in the Free Software Tree.
The code below prints "Destructing o (35092)" when compiled with -O1 -fcse-follow-jumps, but
"Destructing o (-1)" when compiled with -O1 without -fcse-follow-jumps. Oddly, the problem did not
occur when compiling with -fcse-follow-jumps plus all the optimizations listed as constituting -O1 in
the gcc-3.4.4 documentation.
Here's the source code:
extern "C" void printf(const char*,...);
class o {
public:
int id;
o(int i) : id(i) {
printf("Constructing o (%d)\n", id);
}
~o() {
printf("Destructing o (%d)\n", id);
}
};
void f2(void)
{
o o_ary[1] = {-1};
throw (int)64;
}
int main(void)
{
printf("Entering main\n");
try {
f2();
} catch (int i)
{
printf("Caught %d\n", i);
}
printf("Exiting main\n");
}
(Based on a more complicated test case by Kenneth Albanowski.)
Here's the target session, with -fcse-follow-jumps:
~ # /opt/palmos/tests/compiler/tmp/110057_eh_case22B_O1_fcse-follow-jumps.kj
Entering main
Constructing o (-1)
Destructing o (35092)
Destructing o (-1098326664)
Destructing o (-1098326568)
Destructing o (1076856328)
Destructing o (0)
Destructing o (35004)
Destructing o (35360)
Destructing o (1)
Destructing o (35260)
Destructing o (-1098326524)
Destructing o (-1)
Caught 64
Exiting main
Here's a session without -fcse-follow-jumps:
~ # /opt/palmos/tests/compiler/tmp/110057_eh_case22B_O1.kj
Entering main
Constructing o (-1)
Destructing o (-1)
Caught 64
Exiting main
(An x86 checking build of gcc 3.4.3 agreed.)
Here's the host session:
161> /opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/arm-softfloat-linux-gnu-g+
+ -O1 -fcse-follow-jumps -v -save-temps -o /exported/device_root/opt/palmos/tests/compiler/
tmp/110057_eh_case22B_O1_fcse-follow-jumps.kj ../cpp/eh_samples/110057_eh_case22B.cpp
Reading specs from /home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/
gcc/arm-softfloat-linux-gnu/3.4.1/specs
Configured with: /home/kennetha/crosstool-0.29/build/arm-softfloat-linux-gnu/gcc-3.4.1-
glibc-2.3.3/gcc-3.4.1/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu
--prefix=/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3 --with-float=soft --with-
headers=/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/
include --with-local-prefix=/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/arm-
softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-
__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../libexec/gcc/arm-
softfloat-linux-gnu/3.4.1/cc1plus -E -quiet -v -iprefix /home/opt/crosstool/arm-softfloat-linux-
gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-linux-gnu/3.4.1/ -D_GNU_SOURCE -
D__ARM_ARCH_3__ ../cpp/eh_samples/110057_eh_case22B.cpp -msoft-float -fcse-follow-jumps -O1
-o 110057_eh_case22B.ii
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../include/c++/3.4.1"
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../include/c++/3.4.1/arm-softfloat-linux-gnu"
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../include/c++/3.4.1/backward"
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/include"
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/sys-include"
ignoring duplicate directory "/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../include/c++/3.4.1
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../include/c++/3.4.1/arm-softfloat-linux-gnu
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../include/c++/3.4.1/backward
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/include
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/sys-include
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/include
End of search list.
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../libexec/gcc/arm-
softfloat-linux-gnu/3.4.1/cc1plus -fpreprocessed 110057_eh_case22B.ii -quiet -dumpbase
110057_eh_case22B.cpp -msoft-float -auxbase 110057_eh_case22B -O1 -version -fcse-follow-jumps
-o 110057_eh_case22B.s
GNU C++ version 3.4.1 (arm-softfloat-linux-gnu)
compiled by GNU C version 3.3.4 (pre 3.3.5 20040809).
GGC heuristics: --param ggc-min-expand=90 --param ggc-min-heapsize=113332
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/bin/as -mfpu=softfpa -o 110057_eh_case22B.o
110057_eh_case22B.s
/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../libexec/gcc/arm-
softfloat-linux-gnu/3.4.1/collect2 --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.2 -X -m
armelf_linux -p -o /exported/device_root/opt/palmos/tests/compiler/tmp/
110057_eh_case22B_O1_fcse-follow-jumps.kj /home/opt/crosstool/arm-softfloat-linux-gnu/
gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-
gnu/lib/crt1.o /home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/lib/crti.o /home/opt/crosstool/arm-
softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-linux-gnu/3.4.1/crtbegin.o -
L/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-
linux-gnu/3.4.1 -L/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/
gcc -L/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/arm-softfloat-linux-
gnu/3.4.1 -L/home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/lib -L/opt/crosstool/arm-softfloat-
linux-gnu/gcc-3.4.1-glibc-2.3.3/lib/gcc/arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-
linux-gnu/lib 110057_eh_case22B.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /home/opt/
crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/arm-softfloat-linux-gnu/
3.4.1/crtend.o /home/opt/crosstool/arm-softfloat-linux-gnu/gcc-3.4.1-glibc-2.3.3/bin/../lib/gcc/
arm-softfloat-linux-gnu/3.4.1/../../../../arm-softfloat-linux-gnu/lib/crtn.o
--
Summary: Destructor called with wrong argument after exception
with -fcse-follow-jumps -O1
Product: gcc
Version: 3.4.1
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: flash at pobox dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: arm-softfloat-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24075
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Bug rtl-optimization/24075] Destructor called with wrong argument after exception with -fcse-follow-jumps -O1
2005-09-27 4:36 [Bug rtl-optimization/24075] New: Destructor called with wrong argument after exception with -fcse-follow-jumps -O1 flash at pobox dot com
@ 2005-09-27 4:38 ` flash at pobox dot com
0 siblings, 0 replies; 2+ messages in thread
From: flash at pobox dot com @ 2005-09-27 4:38 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From flash at pobox dot com 2005-09-27 04:38 -------
Created an attachment (id=9816)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9816&action=view)
Preprocessed source file
PalmSource bug #110057.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24075
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-09-27 4:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-09-27 4:36 [Bug rtl-optimization/24075] New: Destructor called with wrong argument after exception with -fcse-follow-jumps -O1 flash at pobox dot com
2005-09-27 4:38 ` [Bug rtl-optimization/24075] " flash at pobox dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).