Versions in this module Expand all Collapse all v1 v1.0.0 Sep 22, 2022 Changes in this version + var GoroTermination = struct{ ... } + var SynthTypes = struct{ ... } + func CommunicationPrimitivesOf(node Node) (res []ssa.Value) + func PrintCfg(G Cfg) + func PrintCfgFromNode(n Node) + func PrintNodePosition(n Node, fs *token.FileSet) bool + func SequentiallySelfReaching(start Node) bool + func SetSuccessor(from Node, to Node) + func Visualize(prog *ssa.Program, result *pointer.Result) + func VisualizeFunc(prog *ssa.Program, result *pointer.Result, fun string) + func VisualizeFunction(fun *ssa.Function) + type APIConcBuiltinCall struct + Call ssa.CallInstruction + func (n *APIConcBuiltinCall) CallInstruction() ssa.CallInstruction + func (n *APIConcBuiltinCall) CommTransitive() map[Node]struct{} + func (n *APIConcBuiltinCall) Cond() ssa.Value + func (n *APIConcBuiltinCall) Instruction() ssa.Instruction + func (n *APIConcBuiltinCall) IsCommunicationNode() bool + func (n *APIConcBuiltinCall) Locker() ssa.Value + func (n *APIConcBuiltinCall) Pos() token.Pos + func (n *APIConcBuiltinCall) String() string + type AnySynthetic interface + Block func() *ssa.BasicBlock + Id func() string + type BaseNode struct + func (n *BaseNode) AddPredecessor(n2 Node) + func (n *BaseNode) AddSuccessor(n2 Node) + func (n *BaseNode) CallRelation() CallRelation + func (n *BaseNode) CallRelationNode() Node + func (n *BaseNode) Channel() ssa.Value + func (n *BaseNode) Continuations() (cont map[Node]struct{}) + func (n *BaseNode) DeferLink() Node + func (n *BaseNode) IsChannelOp() bool + func (n *BaseNode) IsDeferred() bool + func (n *BaseNode) PanicCont() Node + func (n *BaseNode) Panickers() map[Node]struct{} + func (n *BaseNode) Predecessor() Node + func (n *BaseNode) Predecessors() map[Node]struct{} + func (n *BaseNode) RandPredecessor() Node + func (n *BaseNode) RandSpawn() Node + func (n *BaseNode) RandSuccessor() Node + func (n *BaseNode) SSANode() *SSANode + func (n *BaseNode) Spawn() Node + func (n *BaseNode) Spawners() map[Node]struct{} + func (n *BaseNode) Spawns() map[Node]struct{} + func (n *BaseNode) Successor() Node + func (n *BaseNode) Successors() map[Node]struct{} + type BlockEntry struct + type BlockEntryDefer struct + type BlockExit struct + type BlockExitDefer struct + type BuiltinCall struct + Call ssa.CallInstruction + func (n *BuiltinCall) Arg(i int) ssa.Value + func (n *BuiltinCall) Args() []ssa.Value + func (n *BuiltinCall) Builtin() *ssa.Builtin + func (n *BuiltinCall) Channel() ssa.Value + func (n *BuiltinCall) CommTransitive() map[Node]struct{} + func (n *BuiltinCall) IsCommunicationNode() bool + func (n *BuiltinCall) Pos() token.Pos + func (n *BuiltinCall) String() string + type CallNodeRelation struct + type CallRelation interface + type Cfg struct + func CFG() *Cfg + func GetCFG(prog *ssa.Program, mains []*ssa.Package, results *pointer.Result) *Cfg + func (cfg *Cfg) AllFunctionsWithName(name string) map[*ssa.Function]struct{} + func (cfg *Cfg) CalleeCount() (count map[int]int) + func (cfg *Cfg) CallerCount() (count map[int]int) + func (cfg *Cfg) ChanOpsPointsToSets(pt *pointer.Result) (count map[int]int) + func (cfg *Cfg) CheckImpreciseChanOps(pt *pointer.Result) (count map[int]int) + func (cfg *Cfg) FileSet() *token.FileSet + func (cfg *Cfg) FindAll(pred func(Node) bool) map[Node]struct{} + func (cfg *Cfg) ForEach(do func(Node)) + func (cfg *Cfg) ForEachFrom(n Node, do func(Node)) + func (cfg *Cfg) ForEachFromIf(n Node, do func(Node), pred func(Node) bool) + func (cfg *Cfg) FunIO(f *ssa.Function) (entry Node, exit Node) + func (cfg *Cfg) FunctionByName(name string) *ssa.Function + func (cfg *Cfg) Functions() map[*ssa.Function]struct{} + func (cfg *Cfg) GetEntries() (ret []Node) + func (cfg *Cfg) GetNode(i ssa.Instruction) Node + func (cfg *Cfg) GetSynthetic(config SynthConfig) Node + func (cfg *Cfg) HasInsn(i ssa.Instruction) bool + func (cfg *Cfg) HasNode(n Node) bool + func (cfg *Cfg) HasSynthetic(config SynthConfig) bool + func (cfg *Cfg) MaxCallees() (cs Node, maxCallees int) + func (g *Cfg) GetAllChans() (res map[ssa.Instruction]struct{}) + func (g *Cfg) GetAllConcurrencyOps() (res map[ssa.Instruction]struct{}) + func (g *Cfg) GetAllGos() (res map[ssa.Instruction]struct{}) + type ChnSynthetic interface + Channel func() ssa.Value + type CommRcv struct + Loc loc.AddressableLocation + func (n *CommRcv) CommaOk() bool + func (n *CommRcv) Pos() token.Pos + func (n *CommRcv) Receiver() (ssa.Value, ssa.Value, bool) + func (n *CommRcv) String() string + type CommSend struct + Loc loc.AddressableLocation + func (n *CommSend) Payload() ssa.Value + func (n *CommSend) Pos() token.Pos + func (n *CommSend) String() string + type CondBroadcast struct + func (n *CondBroadcast) Cond() ssa.Value + type CondSignal struct + func (n *CondSignal) Cond() ssa.Value + type CondWait struct + func (n *CondWait) Cond() ssa.Value + type CondWaiting struct + func (n *CondWaiting) Cond() ssa.Value + type CondWaking struct + func (n *CondWaking) Cond() ssa.Value + type DeferCall struct + func (n *DeferCall) Channel() ssa.Value + func (n *DeferCall) Cond() ssa.Value + func (n *DeferCall) Instruction() ssa.Instruction + func (n *DeferCall) IsCommunicationNode() bool + func (n *DeferCall) Locker() ssa.Value + func (n *DeferCall) Mutex() ssa.Value + func (n *DeferCall) Pos() token.Pos + func (n *DeferCall) RWMutex() ssa.Value + func (n *DeferCall) String() string + type FunctionEntry struct + func (n *FunctionEntry) Pos() token.Pos + func (n *FunctionEntry) String() string + type FunctionExit struct + func (n *FunctionExit) Pos() token.Pos + func (n *FunctionExit) String() string + type MuLock struct + Loc loc.Location + type MuUnlock struct + Loc loc.Location + type Node interface + AddPredecessor func(Node) + AddSuccessor func(Node) + Block func() *ssa.BasicBlock + CallRelation func() CallRelation + CallRelationNode func() Node + Channel func() ssa.Value + CommTransitive func() map[Node]struct{} + Cond func() ssa.Value + Continuations func() map[Node]struct{} + DeferLink func() Node + Function func() *ssa.Function + IsChannelOp func() bool + IsCommunicationNode func() bool + IsDeferred func() bool + Locker func() ssa.Value + Mutex func() ssa.Value + PanicCont func() Node + Panickers func() map[Node]struct{} + Pos func() token.Pos + Predecessor func() Node + Predecessors func() map[Node]struct{} + RWMutex func() ssa.Value + RandPredecessor func() Node + RandSpawn func() Node + RandSuccessor func() Node + SSANode func() *SSANode + Spawn func() Node + Spawners func() map[Node]struct{} + Spawns func() map[Node]struct{} + String func() string + Successor func() Node + Successors func() map[Node]struct{} + func AddSynthetic(config SynthConfig) Node + func CreateSynthetic(config SynthConfig) (n Node) + type PendingGo struct + func (PendingGo) String() string + func (n *PendingGo) CommTransitive() map[Node]struct{} + func (n *PendingGo) IsCommunicationNode() bool + type PostCall struct + func (n *PostCall) Pos() token.Pos + func (p PostCall) String() string + type PostCallRelation struct + type PostDeferCall struct + func (PostDeferCall) String() string + func (n *PostDeferCall) Pos() token.Pos + type RWMuRLock struct + Loc loc.Location + type RWMuRUnlock struct + Loc loc.Location + type SSANode struct + func (n *SSANode) Block() *ssa.BasicBlock + func (n *SSANode) Channel() ssa.Value + func (n *SSANode) CommTransitive() map[Node]struct{} + func (n *SSANode) Cond() ssa.Value + func (n *SSANode) Function() *ssa.Function + func (n *SSANode) Instruction() ssa.Instruction + func (n *SSANode) IsChannelOp() bool + func (n *SSANode) IsCommunicationNode() bool + func (n *SSANode) Locker() ssa.Value + func (n *SSANode) Mutex() ssa.Value + func (n *SSANode) Payload() ssa.Value + func (n *SSANode) Pos() token.Pos + func (n *SSANode) RWMutex() ssa.Value + func (n *SSANode) SSANode() *SSANode + func (n *SSANode) String() string + type SYNTH_TYPE_ID = int + type Select struct + Insn *ssa.Select + func (n *Select) Channel() (ret ssa.Value) + func (n *Select) CommTransitive() map[Node]struct{} + func (n *Select) IsChannelOp() bool + func (n *Select) IsCommunicationNode() bool + func (n *Select) Ops() []ChnSynthetic + func (n *Select) Pos() token.Pos + func (n *Select) String() string + type SelectDefault struct + func (n *SelectDefault) CommTransitive() map[Node]struct{} + func (n *SelectDefault) IsCommunicationNode() bool + func (n *SelectDefault) Pos() token.Pos + func (n *SelectDefault) String() string + type SelectDefer struct + func (n *SelectDefer) Pos() token.Pos + func (n *SelectDefer) String() string + type SelectRcv struct + Ok ssa.Value + Val ssa.Value + func (n *SelectRcv) CommTransitive() map[Node]struct{} + func (n *SelectRcv) CommaOk() bool + func (n *SelectRcv) IsCommunicationNode() bool + func (n *SelectRcv) Pos() token.Pos + func (n *SelectRcv) String() string + type SelectSend struct + Val ssa.Value + func (n *SelectSend) CommTransitive() map[Node]struct{} + func (n *SelectSend) IsCommunicationNode() bool + func (n *SelectSend) Payload() ssa.Value + func (n *SelectSend) Pos() token.Pos + func (n *SelectSend) String() string + type SynthConfig struct + Block *ssa.BasicBlock + Call ssa.CallInstruction + Chn *ssa.MakeChan + Function *ssa.Function + IdSuffixes []string + Insn ssa.Instruction + Loc loc.Location + Pos token.Pos + SelectIndex int + SelectOps []ChnSynthetic + SelectParent *Select + TerminationCause _TERMINATION_CAUSE + Type SYNTH_TYPE_ID + Vals []ssa.Value + type Synthetic struct + func (Synthetic) Pos() token.Pos + func (n *Synthetic) Block() *ssa.BasicBlock + func (n *Synthetic) Channel() ssa.Value + func (n *Synthetic) CommTransitive() map[Node]struct{} + func (n *Synthetic) Cond() ssa.Value + func (n *Synthetic) Function() *ssa.Function + func (n *Synthetic) Id() string + func (n *Synthetic) IsCommunicationNode() bool + func (n *Synthetic) Locker() ssa.Value + func (n *Synthetic) Mutex() ssa.Value + func (n *Synthetic) RWMutex() ssa.Value + func (n *Synthetic) String() string + type TerminateGoro struct + func (n *TerminateGoro) Cause() _TERMINATION_CAUSE + func (n *TerminateGoro) CommTransitive() map[Node]struct{} + func (n *TerminateGoro) IsCommunicationNode() bool + func (n *TerminateGoro) Pos() token.Pos + func (n *TerminateGoro) String() string + type Waiting struct + Call ssa.CallInstruction + func (n *Waiting) CallInstruction() ssa.CallInstruction + func (n *Waiting) CommTransitive() map[Node]struct{} + func (n *Waiting) Cond() ssa.Value + func (n *Waiting) Instruction() ssa.Instruction + func (n *Waiting) IsCommunicationNode() bool + func (n *Waiting) Pos() token.Pos + func (n *Waiting) String() string + type Waking struct + Call ssa.CallInstruction + func (n *Waking) CallInstruction() ssa.CallInstruction + func (n *Waking) CommTransitive() map[Node]struct{} + func (n *Waking) Cond() ssa.Value + func (n *Waking) Instruction() ssa.Instruction + func (n *Waking) IsCommunicationNode() bool + func (n *Waking) Pos() token.Pos + func (n *Waking) String() string