[analyzer] We were silently stopping exploring the path after

visiting 'return;' statement!

This most likely caused us to skip a bunch of code when analyzing with
inlining.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151368 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Anna Zaks 2012-02-24 16:49:41 +00:00
Родитель a0889a8c32
Коммит e55b03a6e4
2 изменённых файлов: 16 добавлений и 3 удалений

Просмотреть файл

@ -432,7 +432,4 @@ void ExprEngine::VisitReturnStmt(const ReturnStmt *RS, ExplodedNode *Pred,
B.generateNode(RS, *it, (*it)->getState());
}
}
else {
B.takeNodes(dstPreVisit);
}
}

Просмотреть файл

@ -69,3 +69,19 @@ void test5() {
int *data;
my_free1((int*)data);
}
// Test that we keep processing after 'return;'
void fooWithEmptyReturn(int x) {
if (x)
return;
x++;
return;
}
int uafAndCallsFooWithEmptyReturn() {
int *x = (int*)malloc(12);
free(x);
fooWithEmptyReturn(12);
return *x; // expected-warning {{Use of memory after it is freed}}
}