exception safety validation

François Dumont frs.dumont@gmail.com
Sat Nov 3 13:53:00 GMT 2012


On 09/28/2012 10:14 PM, François Dumont wrote:
>> Hi
>>
>>     I enhance scope of the small exception safety test framework used 
>> to validate different levels of exception safety through the 
>> containers operations. I have added calls to C++ methods 
>> emplace/emplace_front/emplace_back/emplace_hint in C++11.
>>
>>     Doing so I start having propagation_consistency test for vector 
>> to fail. I finally realized that the problem was that the 
>> throw_value_limit used for this test had no move semantic. So the 
>> copy constructor and assignment operator was called sometimes 
>> throwing exceptions. In this case the Standard says that there is no 
>> strong exception safety guaranty explaining why the test was failing.
>>
>>     To fix it I have added for the moment move semantic to the 
>> throw_value_base type so that it never throws. I had to remove the 
>> dg-do run { xfail } in the equivalent deque test that was surely 
>> failing for the same reason.
>>
>>     Now I wonder if there is something in the Standard saying that 
>> move construct/assign shall never throw ? At least, on vector 
>> modifiers it is clearly said that if the move constructor throw it 
>> can have undefined behavior. If move construct/assign can throw then 
>> we might consider a way to control wether or not it will throw 
>> depending on the test. When testing vector and deque it shall not 
>> throw, when testing node based container it can throw. What do you 
>> think ?
>>
>>     I also wonder what are all the try { ... } catch (const 
>> __gnu_cxx::forced_error&) { throw; } in safety.h for ? Is it to 
>> influence the exception callstack ?
>>
>>
>> François
>>
>

Any news ?

Here is an updated proposal using default implementations as much as 
possible.

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: exception_safety.patch
Type: text/x-patch
Size: 14496 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20121103/3a8a71ad/attachment.bin>


More information about the Libstdc++ mailing list