[LLVMbugs] [Bug 7268] New: Convoluted code-generation bug leading to segfault
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon May 31 04:35:47 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=7268
Summary: Convoluted code-generation bug leading to segfault
Product: clang
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Keywords: miscompilation
Severity: normal
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: jbytheway+llvm at gmail.com
CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com
Created an attachment (id=4953)
--> (http://llvm.org/bugs/attachment.cgi?id=4953)
Source and makefile to reproduce the bug
This bug is rather involved. The crux of the matter seems to be a segfault
that happens at runtime in the atomic operations used to support
boost::shared_ptr. However, in order to make the bug manifest I need a fair
bit of quite random-seeming other code around it.
I don't know whether this is a clang or llvm issue at heart, but I encountered
it through clang, so I'm filing it there.
I'm running Gentoo GNU/Linux on amd64. The code uses both standard library and
Boost headers. I'm using the gcc 4.4.3 standard library, and Boost 1.42
(headers suffice; the Boost libraries are not necessary, and I doubt the
particular code in use has changed significantly in recent Boost versions). If
preprocessed source code would be more useful I can certainly provide that.
I'm using llvm and clang trunk, revision 105219.
I attach a tarball that demonstrates the bug. I did my best to cut it down to
a minimal example, but it's still quite messy. Here's the behaviour I see:
$ make test
clang -O3 -c -o main.o main.cpp
clang -O3 -c -o other.o other.cpp
clang -o exe main.o other.o -lstdc++
./exe
make: *** [test] Segmentation fault
The code doesn't do anything except copy objects around, but of course in the
case of shared_ptrs that's non-trivial.
Note in particular, all of the following are necessary to make the bug
manifest:
- The two source files must be compiled to objects separately and then linked,
not compiled directly together into an executable.
- Optimization must be turned on (level 2 or above suffices).
- Many seemingly-irrelevant details of the various structs defined in
other.hpp.
If I run it in gdb then I get:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400b84 in CF::~CF() ()
and the instruction at that address is:
0x0000000000400b84 <_ZN2CFD2Ev+36>: lock xadd %eax,0x8(%r14)
which I believe is an atomic operation of some kind, and presume must be out of
boost::shared_ptr somewhere.
Let me know if I can provide any more useful information.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list