[cfe-dev] In libc++ is std::make_shared supposed to have a dependency on RTTI?
Louis Gerbarg
lgerbarg at gmail.com
Mon Oct 10 23:00:04 PDT 2011
During migrating some code from various hand rolled smart pointers to
C++11 stuff I noticed a crash, and I am not sure if it is due to a bug
in libc++ or me not understanding some of the dependencies in the new
C++ standard. I was seeing crashes in ~shared_ptr, it appears to be
walking into garbage, presumably looking for type info (the code has
always been compiled -fno-rtti). If I turn on RTTI it goes away, and
if I manually construct the shared_ptr instead of using make_shared it
also goes away.
Below is a reduced test case that shows what is going on. If this
dependency should not exist I am happy to file a bug, but I wanted to
confirm that it is in fact a bug.
Louis
/* testcase.cpp
/Developer/usr/bin/clang++ --std=c++0x --stdlib=libc++ -fno-rtti
testcase.cpp
*/
//Crashes on scope collapse when ~shared_ptr is called.
// Crash goes away if RTTI is turned on
// Crash also goes away if the "SharedTest test = SharedTest(NULL);"
instead of std::make_shared
#include <memory>
typedef std::shared_ptr<void *> SharedTest;
int main (void) {
SharedTest test = std::make_shared<void *>(NULL);
return 0;
}
More information about the cfe-dev
mailing list