[LLVMdev] optimization assumes malloc return is non-null

Chris Lattner sabre at nondot.org
Wed Apr 30 19:21:02 PDT 2008


On Wed, 30 Apr 2008, 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.

LLVM should not (and does not, afaik) assume the malloc succeeds in 
general.

If LLVM is able to eliminate all users of the malloc assuming the 
malloc succeeded (as in this case), then it is safe to assume the malloc 
returned success.

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list