Hello,

I've just subscribed to this list, so please be gentle.

I was using gccxml for awhile, and I am quite happy and satisfied customer. Thanks a lot to everybody who put hard work into this extremely useful software.

Recently I've tried to port my project to most recent Ubuntu (8.10). It comes with gcc 4.3 and a bit outdated gccxml, which unfortunately doesn't support 4.3. Nothing new, I've seen similar problems before and will certainly file a bug with Ubuntu on this. Next thing I've tried is to compile my own version of gccxml from CVS head. That does add 4.3 support but has some funky problems. Here is a simple C++ example that triggers the bug (?):

-----------------
#include <boost/scoped_ptr.hpp>

class foo
{
public:
foo();
   ~foo();
private:
   struct impl;
   boost::scoped_ptr<impl> pimpl;
};
----------------

If I run 'gccxml foo.cpp' it doesn't complain at all, but if I do 'gccxml foo.cpp -fxml=foo.xml', then I get following errors:

/usr/include/boost/checked_delete.hpp: In function 'void boost::checked_delete(T*) [with T = foo::impl]': /usr/include/boost/scoped_ptr.hpp:77: instantiated from 'boost::scoped_ptr<T>::~scoped_ptr() [with T = foo::impl]'
foo.cpp:4:   instantiated from here
/usr/include/boost/checked_delete.hpp:32: error: invalid application of 'sizeof' to incomplete type 'foo::impl' /usr/include/boost/checked_delete.hpp:32: error: creating array with negative size ('-0x00000000000000001') /usr/include/boost/checked_delete.hpp:33: error: invalid application of 'sizeof' to incomplete type 'foo::impl' /usr/include/boost/checked_delete.hpp:33: error: creating array with negative size ('-0x00000000000000001') /usr/include/boost/checked_delete.hpp:34: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.

Interestingly the foo.xml is produced, and looks ok to me.

I think this is a bug, because
1. g++ compiles it fine
2. There is no reason for scoped_ptr's destructor to be instantiated here, as it should be instantiated at the point where ~foo() is defined (which is supposedly in different translation unit). That's standard pimpl idiom which is used quite extensively.

Another interesting observation is that we don't observe this problem with older gccxml versions. Not sure when it was introduced -- I'll try to pick some older version to see if it solves this problem.

Regards,

Kirill

_______________________________________________
gccxml mailing list
[email protected]
http://www.gccxml.org/mailman/listinfo/gccxml

Reply via email to