[llvm-dev] Counterintuitive use of LLVMBool in C-API?

David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 12 02:11:41 PDT 2016

On 12 Sep 2016, at 09:59, Alexander Benikowski via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> I stumbled across the following:
> /* Builds a module from the bitcode in the specified memory buffer, returning a
> reference to the module via the OutModule parameter. Returns 0 on success. */
> LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf,
> LLVMModuleRef *OutModule);
> However in most scenarios i know, a Bool is something like
> 0 = False
> !0 = True
> In short: is it just me or is this really counterintuitive? 

It is counterintuitive, but it is also consistent with a lot of C APIs (including most of the standard library).  Returning 0 on success and non-zero on failure is a very common idiom in C.  The rationale is that you can write:

int ret;
if ((ret = some_function()))
	// Error handling

and that ret will contain a meaningful error code on return (the latter is missing when you use a boolean type).


More information about the llvm-dev mailing list