error handling

Victor Shoup shoup at cs.nyu.edu
Wed Dec 17 12:43:51 UTC 2014


Thanks Marc, 
This all looks very good! 

Marc Glisse <marc.glisse at inria.fr> wrote:
>On Mon, 15 Dec 2014, Victor Shoup wrote:
>
>> You could have the RAII object provide an explicit "kill" method,
>> which is called by the destructor or explicitly by TMP_FREE,
>> and have the object keep track of whether "kill" has already been
>> invoked on it.  That should solve your first problem: in normal
>> execution, TMP_FREE will call "kill" before tests_end() has a
>> chance to complain, and during stack unwinding, the destructor will
>> take care of it instead.
>
>That's the easy way, and precisely what I am trying to avoid. I am
>keeping 
>that option as a last resort.
>
>> About C++03 vs C++11:  I'd say for stuff like this, just go with
>C++11,
>> if that is significantly more convenient.
>
>Here I am trying to understand if it is pointing at a buglet in the C 
>version.
>
>> Anyway, do you think there are other exception-related issues to
>> worry about?
>>
>> Some other things to consider:
>>
>>  * Maybe all calls to abort should be replaced (conditionally, with
>ifdefs)
>>    with throwing an exception (not just men alloc failures)
>
>Most, yes, but there aren't that many. The ASSERTs protected by 
>WANT_ASSERT can remain as they are.
>
>>  * What exception classes should actually be thrown? (I'm still
>trying to
>>    figure this out for NTL...)
>>
>>    One thing I would request: you only throw exceptions that are
>declared
>>    in standard C++ header files, because right now, I don't expose
>any
>>    GMP interfaces in NTL header files, and it would be nice to keep
>it that way.
>>    Failing that, I'd ask that you at least put GMP's exception class
>declarations
>>    in a separate header file...
>>    Failing that, I can probably find a work-around (and maybe dumping
>gmp.h
>>    into some NTL header files is anyway not a big deal).
>>    Anyway, it's something to think about...it would be a shame to get
>this far,
>>    and then have something trivial like this mess things up...
>>    What I certainly don't want to do is catch, translate, and rethrow
>GMP exceptions
>>    in my interface layers: I just want to let GMP exceptions pass
>through my own code.
>>
>>    Anyway, it would be nice if we could coordinate on this just a
>bit...
>>    My current thinking is to throw bad_alloc for memory allocation
>failure,
>>    and runtime_error (possibly subclasses thereof) for everything
>else...
>>    but I'm not sure.
>
>As a user I would just catch(...) and not bother further, but in any
>case 
>I was planning on using standard exceptions.
>
>>  * Are there any other places in GMP that might cause exception
>safety problems?
>>    Any other type of global state, etc.?
>
>There might be global state in deprecated random functions, I don't
>think 
>there is anywhere else, but I don't know every part of GMP.
>
>-- 
>Marc Glisse

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.


More information about the gmp-discuss mailing list