Boost logo

Boost :

Subject: [boost] gcc 4.4.3 + boost optional 1.40 crash
From: Gaetano Mendola (mendola_at_[hidden])
Date: 2012-11-23 03:28:03


Hi all,
after banging my head for an entire day I come out with this
test case showing a possible bug in gcc 4.4.3 or in boost optional,
the test crashes with a pure virtual method called only if compiled
only with -O1, -O2, -O3.
The same code in another machine with gcc 4.7.2 and boost 1.49 works
fine.

Regards
Gaetano Mendola

#include <boost/optional.hpp>
#include <boost/noncopyable.hpp>

class B : boost::noncopyable { //if the noncopyable is removed works
  public:
   virtual size_t bar() const = 0;
};

class D : public B {
  public:
   D()
   :theBar(foo(10))
   { }

   virtual size_t bar() const {
     return theBar;
   }
  private:
   static size_t foo(const boost::optional<size_t> a) {
     if (a) { //if this is a.is_initialized() then it works
       return a.get();
     }
     return 2;
   }
   const size_t theBar;
};

class Foo {
  public:
   Foo(const B& b)
   :theBar(b.bar() * b.bar())
   { }
  private:
   const size_t theBar;
};

int main()
{
   { //if this section is removed works
     D d;
     try {
       Foo myCompound(d);
     } catch(...) {}
   }
   {
     D d;
     try {
       Foo myCompound(d);
     } catch(...) {}
   }
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk