Boost logo

Boost Users :

Subject: Re: [Boost-users] [Test] Test executable crashes always
From: Raffi Enficiaud (raffi.enficiaud_at_[hidden])
Date: 2018-01-04 14:22:17


Le 04.01.18 à 15:13, Nate Widmyer via Boost-users a écrit :
> Bonjour Raffi,
>
>
> I was able to reproduce the crash with this minimal source:
>
> #define BOOST_TEST_MODULE unit_test
> #include <boost/test/included/unit_test.hpp>
>
> struct f
> {
>
>     f()
>     {
>         boost::unit_test::master_test_suite_t master_test_suite =
>             boost::unit_test::framework::master_test_suite(); /* crashes
> later because of this line */
>     }
>     ~f() { }
> };
>
>
> BOOST_FIXTURE_TEST_CASE(sample_test, f)
> {
>     BOOST_TEST(true);
> }
>
>
>
> I noted the critical line above.
>
>
> My goal is to access the path of the executable, and that static getter
> to the master test suite is apparently the right way to get it.

You are not getting a ref but a copy of the master test suite. You
should change the line to

boost::unit_test::master_test_suite_t&
boost::unit_test::framework::master_test_suite();

>
> I've been able to bypass the crash by avoiding keeping the ref as a
> local variable:
>
>
>     f()
>     {
>         boost::filesystem::path exe_dir =
>            
> boost::filesystem::system_complete(boost::unit_test::framework::master_test_suite().argv[0])
>             .remove_filename();
>     }
>

In this example, you are properly accessing the master_test_suite by
reference.

> IMHO it still seems like a bug that a ref returned in the fixture
> constructor causes a crash later on program termination?

There is a bug in the sense that we still allow for copying the master
test suite. I will remove this possibility.

>
>
> Hope this helps.  Thanks again for your time,

Thank you!
Raffi


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net