aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/jingyugao
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-02-22 20:37:25 +0100
committerDmitry Vyukov <dvyukov@google.com>2021-02-22 21:02:12 +0100
commitfcc6d71be2c3ce7d9305c04fc2e87af554571bac (patch)
treeb01dbb3d1e2988e28ea158d2d543d603ec0b9569 /vendor/github.com/jingyugao
parent8f23c528ad5a943b9ffec5dcaf332fd0f614006e (diff)
go.mod: update golangci-lint to v1.37
Diffstat (limited to 'vendor/github.com/jingyugao')
-rw-r--r--vendor/github.com/jingyugao/rowserrcheck/passes/rowserr/rowserr.go30
1 files changed, 23 insertions, 7 deletions
diff --git a/vendor/github.com/jingyugao/rowserrcheck/passes/rowserr/rowserr.go b/vendor/github.com/jingyugao/rowserrcheck/passes/rowserr/rowserr.go
index 7b8c64f4c..1a3e96dec 100644
--- a/vendor/github.com/jingyugao/rowserrcheck/passes/rowserr/rowserr.go
+++ b/vendor/github.com/jingyugao/rowserrcheck/passes/rowserr/rowserr.go
@@ -39,10 +39,10 @@ type runner struct {
func NewRun(pkgs ...string) func(pass *analysis.Pass) (interface{}, error) {
return func(pass *analysis.Pass) (interface{}, error) {
- pkgs = append(pkgs, "database/sql")
- for _, pkg := range pkgs {
+ sqlPkgs := append(pkgs, "database/sql")
+ for _, pkg := range sqlPkgs {
r := new(runner)
- r.sqlPkgs = pkgs
+ r.sqlPkgs = sqlPkgs
r.run(pass, pkg)
}
return nil, nil
@@ -107,7 +107,7 @@ func (r runner) run(pass *analysis.Pass, pkgPath string) (interface{}, error) {
return nil, nil
}
-func (r *runner) notCheck(b *ssa.BasicBlock, i int) bool {
+func (r *runner) notCheck(b *ssa.BasicBlock, i int) (ret bool) {
call, ok := r.getReqCall(b.Instrs[i])
if !ok {
return false
@@ -118,14 +118,22 @@ func (r *runner) notCheck(b *ssa.BasicBlock, i int) bool {
if !ok {
continue
}
-
if len(*val.Referrers()) == 0 {
return true
}
resRefs := *val.Referrers()
- for _, resRef := range resRefs {
+ var notCallClose func(resRef ssa.Instruction) bool
+ notCallClose = func(resRef ssa.Instruction) bool {
switch resRef := resRef.(type) {
+ case *ssa.Phi:
+ resRefs = append(resRefs, (*resRef.Referrers())...)
+ for _, rf := range *resRef.Referrers() {
+ if !notCallClose(rf) {
+ return false
+ }
+ }
+
case *ssa.Store: // Call in Closure function
if len(*resRef.Addr.Referrers()) == 0 {
return true
@@ -168,10 +176,17 @@ func (r *runner) notCheck(b *ssa.BasicBlock, i int) bool {
}
}
}
+
}
+ return true
}
- }
+ for _, resRef := range resRefs {
+ if !notCallClose(resRef) {
+ return false
+ }
+ }
+ }
return true
}
@@ -205,6 +220,7 @@ func (r *runner) getResVal(instr ssa.Instruction) (ssa.Value, bool) {
if types.Identical(instr.Type(), r.rowsTyp) {
return instr, true
}
+ default:
}
return nil, false