Skip to content

Commit de6b2e5

Browse files
Add memory leak instrumentation to abort and exit
1 parent 179aacb commit de6b2e5

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <stdlib.h>
2+
3+
extern void __VERIFIER_error() __attribute__ ((__noreturn__));
4+
5+
int main() {
6+
int *p = malloc(sizeof(int));
7+
if(*p == 0)
8+
abort();
9+
if(*p == 1)
10+
exit(1);
11+
if(*p == 2)
12+
_Exit(1);
13+
free(p);
14+
return 0;
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CORE
2+
main.c
3+
--memory-leak-check
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
_Exit\.memory-leak\.1.*FAILURE
8+
__CPROVER__start\.memory-leak\.1.*SUCCESS
9+
abort\.memory-leak\.1.*FAILURE
10+
exit\.memory-leak\.1.*FAILURE
11+
--
12+
^warning: ignoring

scripts/delete_failing_smt2_solver_tests

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ rm Malloc23/test.desc
5353
rm Malloc24/test.desc
5454
rm Memory_leak1/test.desc
5555
rm Memory_leak2/test.desc
56+
rm Memory_leak_abort/test.desc
5657
rm Multi_Dimensional_Array1/test.desc
5758
rm Multi_Dimensional_Array2/test.desc
5859
rm Multi_Dimensional_Array3/test.desc

src/analyses/goto_check.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,6 +1703,15 @@ void goto_checkt::goto_check(
17031703
}
17041704
else if(i.is_assume())
17051705
{
1706+
// These are further 'exit points' of the program
1707+
const exprt simplified_guard = simplify_expr(i.guard, ns);
1708+
if(
1709+
enable_memory_leak_check && simplified_guard.is_false() &&
1710+
(i.function == "abort" || i.function == "exit" ||
1711+
i.function == "_Exit"))
1712+
{
1713+
memory_leak_check(i.function);
1714+
}
17061715
if(!enable_assumptions)
17071716
{
17081717
i.make_skip();

0 commit comments

Comments
 (0)