https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62119

            Bug ID: 62119
           Summary: dangling reference : gslice_array's copy constructor
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: faithandbrave at gmail dot com

follow code happens segmentation fault by dangling deference.

#include <iostream>
#include <valarray>
#include <numeric>

int main()
{
  std::valarray<int> v(15);
  std::iota(std::begin(v), std::end(v), 0);

  const std::size_t start = 1u;
  const std::valarray<std::size_t> lengths = {3u, 2u};
  const std::valarray<std::size_t> strides = {5u, 1u};

  // here
  std::gslice_array<int> result = v[std::gslice(start, lengths, strides)];

  result = 99;

  for (int x : v) {
    std::cout << x << std::endl;
  }
}


gslice_array.h

private:
  const valarray<size_t>& _M_index;


template<typename _Tp>
  inline
  gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a)
  : _M_array(__a._M_array), _M_index(__a._M_index) {}

Reply via email to