[LLVMdev] GSoC'09 question - previous mail w/o html

Mihai Balint mihai at cs.upt.ro
Thu Mar 26 08:28:18 PDT 2009


Hello llvm,

I am a first year PhD student at "Politehnica" University of  
Timisoara, Romania. I am a part of the LOOSE Research group (http://www.loose.upt.ro 
) and until now I have been involved in several research projects in  
reverse-engineering object oriented software.

Currently I am using llvm to statically check C/C++ programs for  
memory leaks. What I have until now is a llvm FunctionPass that tries  
to find a CFG path from each malloc or new to a corresponding free or  
delete. This is achieved by first doing a quick intra-procedural  
search for leaking paths and then inter-procedurally double checking  
the results. Further improvements would include a path viability check  
with a solver and some shape analysis.

This summer however, I plan to create an "optimization" that  
automatically fixes memory leaks in programs - obviously only those  
that can be fixed with the available information, for example:

int addAndFree(int *x, int y) {
	y += *x; free(x);
	return y;
}

int functionCalled10MTimesInSomeLoop(int index, int data[]) {
	int *x = (int*)malloc(sizeof(int));
	if(index < 3) { // do stuff with x, index and data
		*x = data[index];
		return addAndFree(x,index);
	} else
		return -1;
}

the function would not leak if that free instruction was copied in  
bb2: before ret (see bellow: -O4 version of above)

define i32 @_Z32functionCalled10MTimesInSomeLoopiPi(i32 %index, i32*  
nocapture %data) nounwind {
entry:
	%0 = malloc i32		; <i32*> [#uses=1]
	%1 = icmp sgt i32 %index, 2		; <i1> [#uses=1]
	br i1 %1, label %bb2, label %bb

bb:		; preds = %entry
	%2 = getelementptr i32* %data, i32 %index		; <i32*> [#uses=1]
	%3 = load i32* %2, align 4		; <i32> [#uses=1]
	%4 = add i32 %3, %index		; <i32> [#uses=1]
	free i32* %0
	ret i32 %4

bb2:		; preds = %entry
	; would be nice to insert: free i32* %0  ; here
	ret i32 -1
}

So seeing as this is not on the open projects list, is it even worth  
applying for SummerOfCode?

best wishes,

Mihai.

PS: sorry for including html in the previous mail 



More information about the llvm-dev mailing list