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

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This shows the same race, without any library components:

struct regex {
  struct regex_impl { int i; int size() const { return i; } };
  regex_impl* p;
  regex() : p(new regex_impl{42}) { }
  ~regex() { delete p; }
  int size() const { return p->size(); }
  void f(int) const { }
};

struct regex_iterator {
  regex_iterator(const regex& re) { for (int i = 0; i < re.size(); ++i)
re.f(i); }
};

int main()
{
    const regex reTest;

    auto f = [&reTest]()
    {
        regex_iterator iter(reTest);
    };

    #pragma omp parallel for
    for(unsigned i = 0; i < 10; ++i)
        f();
}

Reply via email to