]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: remove redundant "type:" prefix check
authorYoulin Feng <fengyoulin@live.com>
Fri, 5 Sep 2025 14:48:48 +0000 (22:48 +0800)
committerGopher Robot <gobot@golang.org>
Tue, 30 Sep 2025 21:48:08 +0000 (14:48 -0700)
Remove redundant "type:" prefix check on symbol names in isFixedLoad,
also refactor some duplicate code into methods.

Change-Id: I8358422596eea8c39d1a30a554bd0aae8b570038
Reviewed-on: https://go-review.googlesource.com/c/go/+/701275
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/cmd/compile/internal/ssa/rewrite.go
src/cmd/internal/obj/link.go

index 880c2223ef2229776a1574954d4426f0a6c69089..47f225c7aeb7c0c77776b0a3cbbefa900764dfe6 100644 (file)
@@ -2059,12 +2059,12 @@ func isFixedLoad(v *Value, sym Sym, off int64) bool {
                return false
        }
 
-       if strings.HasPrefix(lsym.Name, "type:") {
+       if ti := lsym.TypeInfo(); ti != nil {
                // Type symbols do not contain information about their fields, unlike the cases above.
                // Hand-implement field accesses.
                // TODO: can this be replaced with reflectdata.writeType and just use the code above?
 
-               t := (*lsym.Extra).(*obj.TypeInfo).Type.(*types.Type)
+               t := ti.Type.(*types.Type)
 
                for _, f := range rttype.Type.Fields() {
                        if f.Offset == off && copyCompatibleType(v.Type, f.Type) {
@@ -2118,12 +2118,12 @@ func rewriteFixedLoad(v *Value, sym Sym, sb *Value, off int64) *Value {
                base.Fatalf("fixedLoad data not known for %s:%d", sym, off)
        }
 
-       if strings.HasPrefix(lsym.Name, "type:") {
+       if ti := lsym.TypeInfo(); ti != nil {
                // Type symbols do not contain information about their fields, unlike the cases above.
                // Hand-implement field accesses.
                // TODO: can this be replaced with reflectdata.writeType and just use the code above?
 
-               t := (*lsym.Extra).(*obj.TypeInfo).Type.(*types.Type)
+               t := ti.Type.(*types.Type)
 
                ptrSizedOpConst := OpConst64
                if f.Config.PtrSize == 4 {
@@ -2613,10 +2613,7 @@ func isDirectType1(v *Value) bool {
                return isDirectType2(v.Args[0])
        case OpAddr:
                lsym := v.Aux.(*obj.LSym)
-               if lsym.Extra == nil {
-                       return false
-               }
-               if ti, ok := (*lsym.Extra).(*obj.TypeInfo); ok {
+               if ti := lsym.TypeInfo(); ti != nil {
                        return types.IsDirectIface(ti.Type.(*types.Type))
                }
        }
@@ -2649,10 +2646,7 @@ func isDirectIface1(v *Value, depth int) bool {
                return isDirectIface2(v.Args[0], depth-1)
        case OpAddr:
                lsym := v.Aux.(*obj.LSym)
-               if lsym.Extra == nil {
-                       return false
-               }
-               if ii, ok := (*lsym.Extra).(*obj.ItabInfo); ok {
+               if ii := lsym.ItabInfo(); ii != nil {
                        return types.IsDirectIface(ii.Type.(*types.Type))
                }
        case OpConstNil:
index 6513e116872a0a86a2261daf0bb038c0e2b776c5..816fed026f35ad52ad77aa8546a468f2ba0d5f3a 100644 (file)
@@ -464,7 +464,7 @@ type LSym struct {
        P      []byte
        R      []Reloc
 
-       Extra *interface{} // *FuncInfo, *VarInfo, *FileInfo, or *TypeInfo, if present
+       Extra *interface{} // *FuncInfo, *VarInfo, *FileInfo, *TypeInfo, or *ItabInfo, if present
 
        Pkg    string
        PkgIdx int32
@@ -604,6 +604,15 @@ func (s *LSym) NewTypeInfo() *TypeInfo {
        return t
 }
 
+// TypeInfo returns the *TypeInfo associated with s, or else nil.
+func (s *LSym) TypeInfo() *TypeInfo {
+       if s.Extra == nil {
+               return nil
+       }
+       t, _ := (*s.Extra).(*TypeInfo)
+       return t
+}
+
 // An ItabInfo contains information for a symbol
 // that contains a runtime.itab.
 type ItabInfo struct {
@@ -620,6 +629,15 @@ func (s *LSym) NewItabInfo() *ItabInfo {
        return t
 }
 
+// ItabInfo returns the *ItabInfo associated with s, or else nil.
+func (s *LSym) ItabInfo() *ItabInfo {
+       if s.Extra == nil {
+               return nil
+       }
+       i, _ := (*s.Extra).(*ItabInfo)
+       return i
+}
+
 // WasmImport represents a WebAssembly (WASM) imported function with
 // parameters and results translated into WASM types based on the Go function
 // declaration.