Hi,
This is my first post and I am looking at the bug 50482 . It is related to malloc optimization. I have a doubt related to malloc optimization.
Here is the code:-
#include <stdlib.h>
int test() {
char *x = malloc(-1);
char *y = malloc(2);
int ret = (x != NULL) && (y != NULL);
free(x); free(y);
return ret;
}
Above program returns 1.
During optimization (-O1) when llvm IR goes through instruction combining pass then program behaves incorrect.
If we have a malloc call which is only used in any amount of comparisons to
null and free calls, delete the calls and replace the comparisons with true
or false as appropriate.
but is it feasible solution to replace every malloc call with true or false when comparison to null and free calls?
First, great you are interested in working on LLVM.
I think you might have stumbled on a bug report that is not great for beginners.
I don't think there is a bug here, optimizing this to return 1 seems fine. That
said, the people reporting the bug obviously disagree which will at least cause
some discussion before any decision on how to deal with this is made. Long story
short, you might want to look at another bug.
Consider a program that allocates memory, computes something in it and
frees the memory. If the computation can be done at compile time and all
stores are removed by Dead Store Elimination and the address doesn't
otherwise leak, the program can be reduced to malloc + free (or
new+delete). That makes it very beneficial to be able to remove the
allocation pair as well.