[LLVMdev] optimization assumes malloc return is non-null

David Vandevoorde daveed at vandevoorde.com
Wed Apr 30 11:29:41 PDT 2008


On Apr 30, 2008, at 2:10 PM, Ryan M. Lefever wrote:
> Consider the following c code:
>
> #include <stdlib.h>
>
> int main(int argc, char** argv){
>   if(malloc(sizeof(int)) == NULL){ return 0; }
>   else{ return 1; }
> }
>
>
> When I compile it with -O3, it produces the following bytecode:
>
> define i32 @main(i32 %argc, i8** %argv) {
> entry:
>         ret i32 1
> }
>
> Is this an error?  It should be possible for malloc to return NULL, if
> it can not allocate more space.  In fact, some programs should be able
> to gracefully handle such situations.

It's an allowable program transformation because a call to malloc is  
not in itself a side effect.  See e.g. 5.1.2.3 in the C standard.

	Daveed




More information about the llvm-dev mailing list