[LLVMdev] error api for APInt / APFloat

Chris Lattner clattner at apple.com
Wed Aug 19 23:24:42 PDT 2009


On Aug 19, 2009, at 11:19 PM, Erick Tryzelaar wrote:

> On Wed, Aug 19, 2009 at 11:08 PM, Chris Lattner<clattner at apple.com>  
> wrote:
>>
>> As we discussed on IRC, I don't think there is any reason for the
>> implementation of these methods to check these invariants.  These  
>> are clear
>> API invariants that the caller can check if needbe.  Making the
>> implementation check these will slow down clients which are known  
>> to be well
>> formed.  I didn't look at all of the things you listed, perhaps  
>> some other
>> ones would make some more to be recoverable errors.
>
> By that logic, I think it's safe to say then to say that it's an
> invariant of APInt and APFloat to pass in a well formed string, and
> that it's the client's responsibility to make sure that the string
> isn't invalid. Which then follows that the assertions checking the
> validity of the string should stay.

You're right that anything can be declared to be a property the caller  
needs to enforce.  This makes it a muddy issue that boils down to a  
judgement call based on how low-level the API is and how complex the  
invariant is.

Two examples:

Since APInt is a very low level class, bitwidth is something clients  
can be expected to have to know about.

Since detecting errors in floating point string literals basically  
requires parsing the whole string, so making clients enforce all the  
invariants would basically make a string literal parsing routine  
useless.  Something like 'parsing a string' is also inherently an  
operation that can fail if the input is malformed, so returning an  
error code makes sense.

Does this rationale seem reasonable to you?

-Chris



More information about the llvm-dev mailing list