internal/legacy: fix ExtensionTypeFromDesc

Change-Id: I1da7fac27ae38e8556cc6bf360d71a38b16c22cd
Reviewed-on: https://go-review.googlesource.com/c/155457
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/legacy/extension.go b/internal/legacy/extension.go
index 4a074d2..0589acb 100644
--- a/internal/legacy/extension.go
+++ b/internal/legacy/extension.go
@@ -172,12 +172,17 @@
 		Options:      f.Options,
 		EnumType:     conv.EnumType,
 		MessageType:  conv.MessageType,
-		ExtendedType: Export{}.MessageTypeOf(d.ExtendedType),
+		ExtendedType: pimpl.Export{}.MessageTypeOf(d.ExtendedType),
 	})
 	if err != nil {
 		panic(err)
 	}
-	xt := pimpl.Export{}.ExtensionTypeOf(xd, reflect.Zero(t).Interface())
+	var zv interface{}
+	switch xd.Kind() {
+	case pref.EnumKind, pref.MessageKind, pref.GroupKind:
+		zv = reflect.Zero(t).Interface()
+	}
+	xt := pimpl.Export{}.ExtensionTypeOf(xd, zv)
 
 	// Cache the conversion for both directions.
 	extensionDescCache.Store(xt, d)