aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/gostaticanalysis/analysisutil/ssa.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2022-09-05 14:27:54 +0200
committerGitHub <noreply@github.com>2022-09-05 12:27:54 +0000
commitb2f2446b46bf02821d90ebedadae2bf7ae0e880e (patch)
tree923cf42842918d6bebca1d6bbdc08abed54d274d /vendor/github.com/gostaticanalysis/analysisutil/ssa.go
parente6654faff4bcca4be92e9a8596fd4b77f747c39e (diff)
go.mod, vendor: update (#3358)
* go.mod, vendor: remove unnecessary dependencies Commands: 1. go mod tidy 2. go mod vendor * go.mod, vendor: update cloud.google.com/go Commands: 1. go get -u cloud.google.com/go 2. go mod tidy 3. go mod vendor * go.mod, vendor: update cloud.google.com/* Commands: 1. go get -u cloud.google.com/storage cloud.google.com/logging 2. go mod tidy 3. go mod vendor * go.mod, .golangci.yml, vendor: update *lint* Commands: 1. go get -u golang.org/x/tools github.com/golangci/golangci-lint@v1.47.0 2. go mod tidy 3. go mod vendor 4. edit .golangci.yml to suppress new errors (resolved in the same PR later) * all: fix lint errors hash.go: copy() recommended by gosimple parse.go: ent is never nil verifier.go: signal.Notify() with unbuffered channel is bad. Have no idea why. * .golangci.yml: adjust godot rules check-all is deprecated, but still work if you're hesitating too - I'll remove this commit
Diffstat (limited to 'vendor/github.com/gostaticanalysis/analysisutil/ssa.go')
-rw-r--r--vendor/github.com/gostaticanalysis/analysisutil/ssa.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/vendor/github.com/gostaticanalysis/analysisutil/ssa.go b/vendor/github.com/gostaticanalysis/analysisutil/ssa.go
index 517f6b9b4..2e22bbe79 100644
--- a/vendor/github.com/gostaticanalysis/analysisutil/ssa.go
+++ b/vendor/github.com/gostaticanalysis/analysisutil/ssa.go
@@ -20,7 +20,8 @@ func IfInstr(b *ssa.BasicBlock) *ssa.If {
}
// Phi returns phi values which are contained in the block b.
-func Phi(b *ssa.BasicBlock) (phis []*ssa.Phi) {
+func Phi(b *ssa.BasicBlock) []*ssa.Phi {
+ var phis []*ssa.Phi
for _, instr := range b.Instrs {
if phi, ok := instr.(*ssa.Phi); ok {
phis = append(phis, phi)
@@ -29,7 +30,7 @@ func Phi(b *ssa.BasicBlock) (phis []*ssa.Phi) {
break
}
}
- return
+ return phis
}
// Returns returns a slice of *ssa.Return in the function.
@@ -54,10 +55,14 @@ func Returns(v ssa.Value) []*ssa.Return {
func returnsInBlock(b *ssa.BasicBlock, done map[*ssa.BasicBlock]bool) (rets []*ssa.Return) {
if done[b] {
- return
+ return nil
}
done[b] = true
+ if b.Index != 0 && len(b.Preds) == 0 {
+ return nil
+ }
+
if len(b.Instrs) != 0 {
switch instr := b.Instrs[len(b.Instrs)-1].(type) {
case *ssa.Return:
@@ -68,7 +73,8 @@ func returnsInBlock(b *ssa.BasicBlock, done map[*ssa.BasicBlock]bool) (rets []*s
for _, s := range b.Succs {
rets = append(rets, returnsInBlock(s, done)...)
}
- return
+
+ return rets
}
// BinOp returns binary operator values which are contained in the block b.