[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


           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++
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
- 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

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