[LLVMbugs] [Bug 7114] New: Clang instantiates implicit virtual destructor too early
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Tue May 11 11:30:24 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=7114
Summary: Clang instantiates implicit virtual destructor too
early
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: dgregor at apple.com
CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com
Blocks: 6023
lackthorn:clang dgregor$ cat t.cpp
class A { virtual ~A(); };
template<typename T>
class B {
public:
class Inner : public A { };
static Inner i;
static const unsigned value = sizeof(i) == 4;
};
int f() { return B<int>::value; }
Blackthorn:clang dgregor$ clang++ t.cpp
t.cpp:6:17: error: base class 'A' has private destructor
class Inner : public A { };
^~~~~~~~
t.cpp:1:19: note: declared private here
class A { virtual ~A(); };
^
1 error generated.
Here, we should not be instantiating the implicit, virtual destructor because
it is never "used" (nor is anything that involves the vtable). While this code
is rather sketchy to start with (compilers are allowed to try to instantiate
the virtual member function definitions whenever they want), it happens to be
used in Boost's is_polymorphic type trait, so it has to work. See
Boost.Serialization's test_static_warning test.
--
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