------- Comment #3 from jaco at kroon dot co dot za  2006-09-15 06:21 -------
Ok.  My understanding of CXX ABI isn't that great.  Some would say "I just code
with C/C++" but I also happen to know that that isn't true.  Take what I say
here as "I'm a user of C/C++ and my understanding of everything behind the
scenes may not quite be what it should".

It's a typedef for a function pointer that takes a void* parameter.  Whether we
use it in C/C++ the actual calling semantics should be the same afaik.  aka, we
push the void* onto the stack, and issue the call to the given pointer address.
 The size of the actual pointer should be the same size whether we use C or
C++, so I fail to see how this would make a difference.  The other solution is
to close the #ifdef and re-open it, and that imho will look a lot uglier.  It
won't make a difference to the "C" compiled version (when compared to moving
the typedef), whereas I simply fail to see the difference when compiling as a
"C++" program (if there is any).

As for regression, this worked in 3.4.6, at which point the typedef was absent,
and instead the function pointer signatures was handled inside the function
declarations:

  void*
  __cxa_vec_new(size_t __element_count, size_t __element_size,
                size_t __padding_size, void (*__constructor) (void*),
                void (*__destructor) (void*));


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29095

Reply via email to