diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 3ad23cd..d455c28 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -74,11 +74,10 @@
 // patched to support unique build environments that impose restrictions
 // on the dependencies of generated source code.
 var (
-	protoifacePackage    goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoiface")
-	protoimplPackage     goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoimpl")
-	protoreflectPackage  goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect")
-	protoregistryPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoregistry")
-	prototypePackage     goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/prototype")
+	protoifacePackage   goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoiface")
+	protoimplPackage    goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoimpl")
+	protoreflectPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect")
+	prototypePackage    goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/prototype")
 )
 
 type goImportPath interface {
diff --git a/internal/impl/codec_map.go b/internal/impl/codec_map.go
index 53a860b..4916704 100644
--- a/internal/impl/codec_map.go
+++ b/internal/impl/codec_map.go
@@ -10,12 +10,9 @@
 	"sort"
 
 	"google.golang.org/protobuf/internal/encoding/wire"
-	"google.golang.org/protobuf/proto"
 	pref "google.golang.org/protobuf/reflect/protoreflect"
 )
 
-var protoMessageType = reflect.TypeOf((*proto.Message)(nil)).Elem()
-
 type mapInfo struct {
 	goType     reflect.Type
 	keyWiretag uint64
diff --git a/internal/impl/legacy_enum.go b/internal/impl/legacy_enum.go
index 142a90a..ffbdbeb 100644
--- a/internal/impl/legacy_enum.go
+++ b/internal/impl/legacy_enum.go
@@ -85,8 +85,6 @@
 
 var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
 
-var legacyEnumNumberType = reflect.TypeOf(pref.EnumNumber(0))
-
 // LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type,
 // which must be an int32 kind and not implement the v2 API already.
 //
diff --git a/internal/impl/legacy_message.go b/internal/impl/legacy_message.go
index ff8af03..e4e446b 100644
--- a/internal/impl/legacy_message.go
+++ b/internal/impl/legacy_message.go
@@ -9,7 +9,6 @@
 	"reflect"
 	"strings"
 	"sync"
-	"unicode"
 
 	"google.golang.org/protobuf/internal/descopts"
 	ptag "google.golang.org/protobuf/internal/encoding/tag"
@@ -279,23 +278,3 @@
 func (placeholderEnumValues) ByNumber(n pref.EnumNumber) pref.EnumValueDescriptor {
 	return filedesc.PlaceholderEnumValue(pref.FullName(fmt.Sprintf("UNKNOWN_%d", n)))
 }
-
-// aberrantMapEntryName derives the name for a map entry message.
-// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057
-func aberrantMapEntryName(s pref.Name) pref.Name {
-	var b []byte
-	upperNext := true
-	for _, c := range s {
-		switch {
-		case c == '_':
-			upperNext = true
-		case upperNext:
-			b = append(b, byte(unicode.ToUpper(c)))
-			upperNext = false
-		default:
-			b = append(b, byte(c))
-		}
-	}
-	b = append(b, "Entry"...)
-	return pref.Name(b)
-}
diff --git a/internal/impl/message.go b/internal/impl/message.go
index 59f04ce..305e17d 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -64,8 +64,6 @@
 // exporting the requested field (e.g., already exported).
 type exporter func(v interface{}, i int) interface{}
 
-var prefMessageType = reflect.TypeOf((*pref.Message)(nil)).Elem()
-
 // getMessageInfo returns the MessageInfo for any message type that
 // is generated by our implementation of protoc-gen-go (for v2 and on).
 // If it is unable to obtain a MessageInfo, it returns nil.
diff --git a/internal/impl/message_field.go b/internal/impl/message_field.go
index 0c79c4c..e15b861 100644
--- a/internal/impl/message_field.go
+++ b/internal/impl/message_field.go
@@ -442,12 +442,6 @@
 	}
 }
 
-var (
-	enumIfaceV2    = reflect.TypeOf((*pref.Enum)(nil)).Elem()
-	messageIfaceV1 = reflect.TypeOf((*piface.MessageV1)(nil)).Elem()
-	messageIfaceV2 = reflect.TypeOf((*pref.ProtoMessage)(nil)).Elem()
-)
-
 // defaultValueOf returns the default value for the field.
 func defaultValueOf(fd pref.FieldDescriptor) pref.Value {
 	if fd == nil {
diff --git a/proto/proto.go b/proto/proto.go
index de7f2be..983fc71 100644
--- a/proto/proto.go
+++ b/proto/proto.go
@@ -5,12 +5,8 @@
 package proto
 
 import (
-	"google.golang.org/protobuf/internal/errors"
 	"google.golang.org/protobuf/reflect/protoreflect"
 )
 
 // Message is the top-level interface that all messages must implement.
 type Message = protoreflect.ProtoMessage
-
-// errInternalNoFast indicates that fast-path operations are not available for a message.
-var errInternalNoFast = errors.New("BUG: internal error (errInternalNoFast)")
diff --git a/reflect/protodesc/desc.go b/reflect/protodesc/desc.go
index e378d82..5a65e9a 100644
--- a/reflect/protodesc/desc.go
+++ b/reflect/protodesc/desc.go
@@ -131,7 +131,7 @@
 		}
 		imps[imp.Path()] = true
 	}
-	for i, _ := range fd.GetDependency() {
+	for i := range fd.GetDependency() {
 		imp := &f.L2.Imports[i]
 		imps.importPublic(imp.Imports())
 	}
diff --git a/reflect/protodesc/desc_validate.go b/reflect/protodesc/desc_validate.go
index 9b858e6..042950c 100644
--- a/reflect/protodesc/desc_validate.go
+++ b/reflect/protodesc/desc_validate.go
@@ -171,7 +171,7 @@
 				}
 			}
 		}
-		for j, _ := range md.GetOneofDecl() {
+		for j := range md.GetOneofDecl() {
 			o := &m.L2.Oneofs.List[j]
 			if o.Fields().Len() == 0 {
 				return errors.New("message oneof %q must contain at least one field declaration", o.FullName())
diff --git a/reflect/protoregistry/registry.go b/reflect/protoregistry/registry.go
index 4abfc10..0b60c64 100644
--- a/reflect/protoregistry/registry.go
+++ b/reflect/protoregistry/registry.go
@@ -499,8 +499,7 @@
 	if r == nil {
 		return nil, NotFound
 	}
-	v, _ := r.typesByName[enum]
-	if v != nil {
+	if v := r.typesByName[enum]; v != nil {
 		if et, _ := v.(protoreflect.EnumType); et != nil {
 			return et, nil
 		}
@@ -531,8 +530,7 @@
 		message = message[i+len("/"):]
 	}
 
-	v, _ := r.typesByName[message]
-	if v != nil {
+	if v := r.typesByName[message]; v != nil {
 		if mt, _ := v.(protoreflect.MessageType); mt != nil {
 			return mt, nil
 		}
@@ -551,8 +549,7 @@
 	if r == nil {
 		return nil, NotFound
 	}
-	v, _ := r.typesByName[field]
-	if v != nil {
+	if v := r.typesByName[field]; v != nil {
 		if xt, _ := v.(protoreflect.ExtensionType); xt != nil {
 			return xt, nil
 		}
