>  Sure, a malloc call has side-effects, so a DCE pass cannot just remove it.
>  Only struct-reorg knows that it has replaced all side-effects with others.

Malloc only has side effects if the result is used.


For example, LLVM will transform


int main(int argc, char** argv){
  if(malloc(sizeof(int)) == NULL){ return 0; }
  else{ return 1; }
}

into return 1

There is a thread going on in the llvm mailing lists about this right
now, and so far all the text people can find in standards says this is
okay (though I think susv2/POSIX says differently).

Chris says:
"
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."




>
>  Richard.
>

Reply via email to