blob: 54ce078c1d878d36a994cd21a95015a58df0fef8 [file] [log] [blame]
Zhongxing Xua40a3572008-10-25 14:56:36 +00001//===----------------------------------------------------------------------===//
2// Random notes for the static analysis module.
3//===----------------------------------------------------------------------===//
4
5Currently the analyzer with basic store will report false alarm for such code:
6
7p[0] = "/bin/sh";
8p[1] = NULL;
9
10execv(p[0], argv);
11
12This is because BasicStore "collapses" all elements of an array into their base
13region. BasicStore should return UnknownVal() when getLValueElement. But that
Zhongxing Xub6213942008-10-28 09:09:48 +000014way will break current test in null-deref-ps.c.
15
16//===----------------------------------------------------------------------===//
17
18Investigate what classes of exprs are passed silently in GRExprEngine::Visit().
19
Zhongxing Xuafd71052008-10-28 09:32:08 +000020One is PredefinedExpr.
Zhongxing Xu8cda9e92008-10-29 07:05:10 +000021
22//===----------------------------------------------------------------------===//
23
24Remove PersistentSValPairs and PersistentSVals?
Zhongxing Xuf8fc4142008-11-03 06:04:23 +000025
26//===----------------------------------------------------------------------===//
27
28If the pointer is symbolic, we should expand it to a full region with symbolic
29values. This can eliminate the following false warning.
30
31struct file {
32 int lineno;
33};
34
35struct file *fileinfo;
36
37void f10() {
38 int i;
39 int *p = 0;
40
41 if (fileinfo->lineno)
42 p = &i;
43
44 if (fileinfo->lineno)
45 *p = 3; // false warning
46}
47
48Now we return a symbolic region for fileinfo->lineno in RegionStore. Loading
49from it returns an UnknownVal. Therefore the path condition is not recorded.
50
51Where should we call this ExpandSymbolicPointer method? Perhaps in
52GRExprEngine::VisitMemberExpr().
53
54Problem: The base expr of MemberExpr can be in various form. How do we get the
55pointer varregion(or other kind of region) to be changed?