aboutsummaryrefslogtreecommitdiffstats
path: root/prog/minimization.go
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2018-11-15 20:16:20 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-11-21 05:30:44 +0100
commit5a0d6e039dc1a8bdf3e14650f0eb106e0196e178 (patch)
tree671299895fb86020f1ee8f2210c9d5158d3542ae /prog/minimization.go
parent846317099cc35cf590d6bea9950ca5e8ce51664d (diff)
prog: try to nullify pointers when minimizing
This patch changes minimization routines to try assigning a.Res to nil for each pointer arg.
Diffstat (limited to 'prog/minimization.go')
-rw-r--r--prog/minimization.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/prog/minimization.go b/prog/minimization.go
index 35cff7976..1762bbbae 100644
--- a/prog/minimization.go
+++ b/prog/minimization.go
@@ -121,11 +121,20 @@ func (typ *UnionType) minimize(ctx *minimizeArgsCtx, arg Arg, path string) bool
}
func (typ *PtrType) minimize(ctx *minimizeArgsCtx, arg Arg, path string) bool {
- // TODO: try to remove optional ptrs
a := arg.(*PointerArg)
if a.Res == nil {
return false
}
+ if !ctx.triedPaths[path+"->"] {
+ removeArg(a.Res)
+ replaceArg(a, MakeSpecialPointerArg(a.Type(), 0))
+ ctx.target.assignSizesCall(ctx.call)
+ if ctx.pred(ctx.p, ctx.callIndex0) {
+ *ctx.p0 = ctx.p
+ }
+ ctx.triedPaths[path+"->"] = true
+ return true
+ }
return ctx.do(a.Res, path)
}