Backtrace is more readable now, erase comes from resize it seems.
#0 0x0000fffff7e4f620 in OpenSP::NCVector<OpenSP::Owner<OpenJade_DSSSL::Expression> >::erase (this=0xffffffffe0c8, p1=0xaaaaab46eaf0, p2=0xaaaaab46eb00)
at /usr/include/OpenSP/Vector.cxx:132
#1 0x0000fffff7e4e0e4 in OpenSP::NCVector<OpenSP::Owner<OpenJade_DSSSL::Expression> >::resize (this=0xffffffffe0c8, n=1) at /usr/include/OpenSP/Vector.h:29
#2 0x0000fffff7ec9ee0 in OpenJade_DSSSL::SchemeParser::parseExpression (this=0xffffffffe538, allowed=16, expr=..., key=@0xffffffffe1cc: OpenJade_DSSSL::Identifier::notKey,
tok=@0xffffffffe1c8: OpenJade_DSSSL::SchemeParser::tokenCloseParen) at SchemeParser.cxx:1004
#3 0x0000fffff7ec9e8c in OpenJade_DSSSL::SchemeParser::parseExpression (this=0xffffffffe538, allowed=0, expr=..., key=@0xffffffffe1cc: OpenJade_DSSSL::Identifier::notKey,
tok=@0xffffffffe1c8: OpenJade_DSSSL::SchemeParser::tokenCloseParen) at SchemeParser.cxx:1001
#4 0x0000fffff7eccdd0 in OpenJade_DSSSL::SchemeParser::parseBegin (this=0xffffffffe538, expr=...) at SchemeParser.cxx:1551
#5 0x0000fffff7eccc54 in OpenJade_DSSSL::SchemeParser::parseBody (this=0xffffffffe538, expr=...) at SchemeParser.cxx:1539
#6 0x0000fffff7ec92c8 in OpenJade_DSSSL::SchemeParser::parseDefine (this=0xffffffffe538, ident=@0xffffffffe3d8: 0xaaaaab4827f0, expr=...) at SchemeParser.cxx:861
#7 0x0000fffff7ec8ed0 in OpenJade_DSSSL::SchemeParser::doDefine (this=0xffffffffe538) at SchemeParser.cxx:814
#8 0x0000fffff7ec5f98 in OpenJade_DSSSL::SchemeParser::parse (this=0xffffffffe538) at SchemeParser.cxx:172
#9 0x0000fffff7e9b2d8 in OpenJade_DSSSL::Interpreter::installBuiltins (this=0xaaaaaacf1b50) at Interpreter.cxx:2093
#10 0x0000fffff7e93448 in OpenJade_DSSSL::Interpreter::Interpreter (this=0xaaaaaacf1b50, groveManager=0xffffffffed00, messenger=0xffffffffea50, unitsPerInch=72000, debugMode=false,
dsssl2=false, style=true, strictMode=false, fotbDescr=...) at Interpreter.cxx:162
#11 0x0000fffff7edb1b8 in OpenJade_DSSSL::StyleEngine::parseSpec (this=0xaaaaaabdae80, specParser=..., charset=..., id=..., mgr=..., defVars=...) at StyleEngine.cxx:85
#12 0x0000fffff7e2f784 in OpenJade_DSSSL::DssslApp::processSysid (this=0xffffffffea48, sysid=...) at DssslApp.cxx:138
#13 0x0000fffff7aaa9c8 in OpenSP::EntityApp::processArguments(int, char**) () from /lib/libosp.so.5
#14 0x0000fffff7a9add4 in OpenSP::CmdLineApp::run(int, char**) () from /lib/libosp.so.5
Also the line number is now correct on the access of pointer p and its destructor call:
line 132 is:
((X *)p)->~X();
(gdb) p p
$1 = (const OpenSP::Owner<OpenJade_DSSSL::Expression> *) 0xaaaaab46eb00
Also the passed pointers are intact:
(gdb) p p1
$6 = (const OpenSP::Owner<OpenJade_DSSSL::Expression> *) 0xaaaaab46eaf0
(gdb) p p2
$7 = (const OpenSP::Owner<OpenJade_DSSSL::Expression> *) 0xaaaaab46eb00
The pointers indicate that we are at p2 already.
And that is odd compared to p1.
(gdb) p *p1
$9 = {_vptr.Owner = 0xfffff7f8a040 <vtable for OpenSP::Owner<OpenJade_DSSSL::Expression>+16>, p_ = 0x0}
(gdb) p *p2
$10 = {_vptr.Owner = 0x6c00000063, p_ = 0x1d1}
See how the _vptr.Owner has no reasonable type.
(gdb) ptype T
type = class OpenSP::Owner<OpenJade_DSSSL::Expression> [with T = OpenJade_DSSSL::Expression] {
private:
T *p_;
Backtrace is more readable now, erase comes from resize it seems.
#0 0x0000fffff7e4f620 in OpenSP: :NCVector< OpenSP: :Owner< OpenJade_ DSSSL:: Expression> >::erase (this=0xfffffff fe0c8, p1=0xaaaaab46eaf0, p2=0xaaaaab46eb00) OpenSP/ Vector. cxx:132 :NCVector< OpenSP: :Owner< OpenJade_ DSSSL:: Expression> >::resize (this=0xfffffff fe0c8, n=1) at /usr/include/ OpenSP/ Vector. h:29 DSSSL:: SchemeParser: :parseExpressio n (this=0xfffffff fe538, allowed=16, expr=..., key=@0xffffffff e1cc: OpenJade_ DSSSL:: Identifier: :notKey, @0xffffffffe1c8 : OpenJade_ DSSSL:: SchemeParser: :tokenClosePare n) at SchemeParser. cxx:1004 DSSSL:: SchemeParser: :parseExpressio n (this=0xfffffff fe538, allowed=0, expr=..., key=@0xffffffff e1cc: OpenJade_ DSSSL:: Identifier: :notKey, @0xffffffffe1c8 : OpenJade_ DSSSL:: SchemeParser: :tokenClosePare n) at SchemeParser. cxx:1001 DSSSL:: SchemeParser: :parseBegin (this=0xfffffff fe538, expr=...) at SchemeParser. cxx:1551 DSSSL:: SchemeParser: :parseBody (this=0xfffffff fe538, expr=...) at SchemeParser. cxx:1539 DSSSL:: SchemeParser: :parseDefine (this=0xfffffff fe538, ident=@ 0xffffffffe3d8: 0xaaaaab4827f0, expr=...) at SchemeParser. cxx:861 DSSSL:: SchemeParser: :doDefine (this=0xfffffff fe538) at SchemeParser. cxx:814 DSSSL:: SchemeParser: :parse (this=0xfffffff fe538) at SchemeParser. cxx:172 DSSSL:: Interpreter: :installBuiltin s (this=0xaaaaaac f1b50) at Interpreter. cxx:2093 DSSSL:: Interpreter: :Interpreter (this=0xaaaaaac f1b50, groveManager= 0xffffffffed00, messenger= 0xffffffffea50, unitsPerInch=72000, debugMode=false, DSSSL:: StyleEngine: :parseSpec (this=0xaaaaaab dae80, specParser=..., charset=..., id=..., mgr=..., defVars=...) at StyleEngine.cxx:85 DSSSL:: DssslApp: :processSysid (this=0xfffffff fea48, sysid=...) at DssslApp.cxx:138 :EntityApp: :processArgumen ts(int, char**) () from /lib/libosp.so.5 :CmdLineApp: :run(int, char**) () from /lib/libosp.so.5
at /usr/include/
#1 0x0000fffff7e4e0e4 in OpenSP:
#2 0x0000fffff7ec9ee0 in OpenJade_
tok=
#3 0x0000fffff7ec9e8c in OpenJade_
tok=
#4 0x0000fffff7eccdd0 in OpenJade_
#5 0x0000fffff7eccc54 in OpenJade_
#6 0x0000fffff7ec92c8 in OpenJade_
#7 0x0000fffff7ec8ed0 in OpenJade_
#8 0x0000fffff7ec5f98 in OpenJade_
#9 0x0000fffff7e9b2d8 in OpenJade_
#10 0x0000fffff7e93448 in OpenJade_
dsssl2=false, style=true, strictMode=false, fotbDescr=...) at Interpreter.cxx:162
#11 0x0000fffff7edb1b8 in OpenJade_
#12 0x0000fffff7e2f784 in OpenJade_
#13 0x0000fffff7aaa9c8 in OpenSP:
#14 0x0000fffff7a9add4 in OpenSP:
Also the line number is now correct on the access of pointer p and its destructor call:
line 132 is:
((X *)p)->~X();
(gdb) p p :Owner< OpenJade_ DSSSL:: Expression> *) 0xaaaaab46eb00
$1 = (const OpenSP:
Also the passed pointers are intact: :Owner< OpenJade_ DSSSL:: Expression> *) 0xaaaaab46eaf0 :Owner< OpenJade_ DSSSL:: Expression> *) 0xaaaaab46eb00
(gdb) p p1
$6 = (const OpenSP:
(gdb) p p2
$7 = (const OpenSP:
The pointers indicate that we are at p2 already.
And that is odd compared to p1. :Owner< OpenJade_ DSSSL:: Expression> +16>, p_ = 0x0}
(gdb) p *p1
$9 = {_vptr.Owner = 0xfffff7f8a040 <vtable for OpenSP:
(gdb) p *p2
$10 = {_vptr.Owner = 0x6c00000063, p_ = 0x1d1}
See how the _vptr.Owner has no reasonable type.
(gdb) ptype T :Owner< OpenJade_ DSSSL:: Expression> [with T = OpenJade_ DSSSL:: Expression] {
type = class OpenSP:
private:
T *p_;
public: :Owner< T> &);
Owner(void);
Owner(T *);
private:
Owner(const OpenSP::Owner<T> &);
public:
~Owner();
void operator=(T *);
private:
void operator=(const OpenSP::Owner<T> &);
public:
operator int(void) const;
T * pointer(void) const;
T * operator->(void) const;
T & operator*(void) const;
void swap(OpenSP:
T * extract(void);
void clear(void);
private:
void del(void);
}
So the question is "why is p2 not a proper OpenSP: :Owner< OpenJade_ DSSSL:: Expression object"