Re: [cxx-abi-dev] Deleted virtual functions
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [cxx-abi-dev] Deleted virtual functions
- To: cxx-abi-dev@xxxxxxxxxxxxxxxx
- Subject: Re: [cxx-abi-dev] Deleted virtual functions
- From: David Vandevoorde <daveed@xxxxxxx>
- Date: Thu, 28 May 2009 22:55:57 -0400
On May 28, 2009, at 10:07 PM, Dennis Handly wrote:
Looks good.
From: David Vandevoorde <daveed@xxxxxxx>
I noticed that there isn't actually a requirement to point virtual
table entried for pure virtual functions at __cxa_pure_virtual. Is
that intentional or just sloppy wording?
Well, why have __cxa_pure_virtual without using it? ;-)
I was wondering about that. Maybe if a pure virtual function has an
implementation one could call that implementation?
I have a suggestion for the signature for __cxa_pure_virtual and the
new
__cxa_deleted_virtual:
extern "C" void __cxa_deleted_virtual(void *this_ptr);
extern "C" void __cxa_pure_virtual(void *this_ptr);
Where this_ptr can be cast to a dummy polymorphic class to get the
class
name to print a nicer message:
// A dummy polymorphic class to make typeid() do the work below.
class pv_dummy {
public:
virtual void dummy_func();
};
extern "C" {
extern void abort();
void __cxa_pure_virtual (void *this_ptr)
{
pv_dummy *obj = (pv_dummy*)this_ptr;
const char *mangled_name = typeid(*obj).name();
const char *demangled_name = abi::__cxa_demangle(mangled_name, 0,
0, 0);
if (!demangled_name) // out of space?
demangled_name = mangled_name;
fprintf(stderr, "aCC runtime: pure virtual function called for
class \"%s\".
\n", demangled_name);
abort();
}
}
Nice! But would that break backward compatibility?
--Apple-Mail-17--1051914877
filename=deleted_funcs.diffs
+ <li>If C::f is a pure virtual function, the corresponding virtual
table
+ entry may point to __cxa_pure_virtual
Did you want to explain why you used "may"?
That's what I was referring to: The existing text didn't require
entries corresponding to pure virtual functions to point to
__cxa_pure_virtual. So I left that uncertainty in the words I added.
Is this the case of declaring it pure but still having a definition?
(for the destructor)
I don't know, unfortunately. I think I attended all the meetings and
read all the mailing list discussions, but it doesn't ring a bell.
Daveed