ssa: switch lblocks to types.Object
Switches lblocks from *ast.Object to types.Object. Removes a user from the infrequently used *ast.Object.
Updates golang/go#52463
Change-Id: I1a21ab55b7136f4891f6aa2f76459880ace389c9
Reviewed-on: https://go-review.googlesource.com/c/tools/+/402034
Reviewed-by: Dominik Honnef <dominik@honnef.co>
Reviewed-by: Daniel Martà <mvdan@mvdan.cc>
Reviewed-by: Tim King <taking@google.com>
Reviewed-by: Zvonimir Pavlinovic <zpavlinovic@google.com>
diff --git a/go/ssa/func.go b/go/ssa/func.go
index c864b49..9ce2bfe 100644
--- a/go/ssa/func.go
+++ b/go/ssa/func.go
@@ -74,13 +74,14 @@
// labelledBlock returns the branch target associated with the
// specified label, creating it if needed.
func (f *Function) labelledBlock(label *ast.Ident) *lblock {
- lb := f.lblocks[label.Obj]
+ obj := f.objectOf(label)
+ lb := f.lblocks[obj]
if lb == nil {
lb = &lblock{_goto: f.newBasicBlock(label.Name)}
if f.lblocks == nil {
- f.lblocks = make(map[*ast.Object]*lblock)
+ f.lblocks = make(map[types.Object]*lblock)
}
- f.lblocks[label.Obj] = lb
+ f.lblocks[obj] = lb
}
return lb
}
diff --git a/go/ssa/ssa.go b/go/ssa/ssa.go
index 0b25253..c96ced2 100644
--- a/go/ssa/ssa.go
+++ b/go/ssa/ssa.go
@@ -331,13 +331,13 @@
// The following fields are set transiently during building,
// then cleared.
- currentBlock *BasicBlock // where to emit code
- objects map[types.Object]Value // addresses of local variables
- namedResults []*Alloc // tuple of named results
- targets *targets // linked stack of branch targets
- lblocks map[*ast.Object]*lblock // labelled blocks
- info *types.Info // *types.Info to build from. nil for wrappers.
- subst *subster // type substitution cache
+ currentBlock *BasicBlock // where to emit code
+ objects map[types.Object]Value // addresses of local variables
+ namedResults []*Alloc // tuple of named results
+ targets *targets // linked stack of branch targets
+ lblocks map[types.Object]*lblock // labelled blocks
+ info *types.Info // *types.Info to build from. nil for wrappers.
+ subst *subster // type substitution cache
}
// BasicBlock represents an SSA basic block.