One last shot, I've found that this is unexpected by the vector code:
  void resize(size_t n) {
    if (n < size_)
      erase(ptr_ + n, ptr_ + size_);
    else if (n > size_)
      append(n - size_);

But in this case:
(gdb) p n
$39 = 2
(gdb) p size_
$40 = 2

So it would need to do NOTHING!
It already is at the requested size.

I found through gdb that it does that correctly.
The first call is:
(gdb) p n
$39 = 2
(gdb) p size_
$40 = 2
and it does nothing.


Then next time it is
(gdb) p size_
$43 = 2
(gdb) p n
$44 = 1

And it will call erase.
(gdb) p *(ptr_+0)
$49 = {_vptr.Owner = 0xfffff7f8a040 <vtable for 
OpenSP::Owner<OpenJade_DSSSL::Expression>+16>, p_ = 0xaaaaab46f9f0}
(gdb) p *(ptr_+1)
$50 = {_vptr.Owner = 0xfffff7f8a040 <vtable for 
OpenSP::Owner<OpenJade_DSSSL::Expression>+16>, p_ = 0x0}
(gdb) p *(ptr_+2)
$51 = {_vptr.Owner = 0x6c00000063, p_ = 0x1d1}

So it thinks it increases (but it doesn't) and then it decreases the vector and 
fails.
Hrm, still nothing to fix in there.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1869734

Title:
  openjade segfaults on arm (due to gcc optimization)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openjade/+bug/1869734/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to