Re: Is this a programming error, or a compiler error..

2019-03-13 Thread Dimitry Andric
On 13 Mar 2019, at 12:57, Willem Jan Withagen  wrote:
> 
> I'm getting a crash in a Ceph test program in the following pice of code:
> 
> struct entity_addrvec_t {
>   vector v;
> .
>   entity_addr_t legacy_addr() const {
> for (auto& a : v) {
>   if (a.type == entity_addr_t::TYPE_LEGACY) {
> return a;
>   }
> }
> return entity_addr_t();
>   }
> ..
> 
> Where the loop is taken, even if v.size() == 0
> So v content is pointing to random memory and itterating over the next 
> pointer results in a crash.

This can happen when the vector is invalidated, due to either it, or its
parent object having been moved from.  Maybe run this under valgrind or
AddressSanitizer, that should give some more clues.

-Dimitry



signature.asc
Description: Message signed with OpenPGP


Is this a programming error, or a compiler error..

2019-03-13 Thread Willem Jan Withagen

Hi,

I'm getting a crash in a Ceph test program in the following pice of code:

struct entity_addrvec_t {
  vector v;
.
  entity_addr_t legacy_addr() const {
    for (auto& a : v) {
  if (a.type == entity_addr_t::TYPE_LEGACY) {
    return a;
  }
    }
    return entity_addr_t();
  }
..

Where the loop is taken, even if v.size() == 0
So v content is pointing to random memory and itterating over the next 
pointer results in a crash.


I would expect the loop not to be executed

--WjW

___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"