Reduce a bunch of generated code in oneof sizers. (#557)

There's no need for oneof sizers to compute the size of the tag/wire
varint, since it can be computed at proto compile time instead (and it
is typically a small number like 1 or 2).
diff --git a/_conformance/conformance_proto/conformance.pb.go b/_conformance/conformance_proto/conformance.pb.go
index 8c1e3ca..cad3622 100644
--- a/_conformance/conformance_proto/conformance.pb.go
+++ b/_conformance/conformance_proto/conformance.pb.go
@@ -243,11 +243,11 @@
 	// payload
 	switch x := m.Payload.(type) {
 	case *ConformanceRequest_ProtobufPayload:
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
 		n += len(x.ProtobufPayload)
 	case *ConformanceRequest_JsonPayload:
-		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
 		n += len(x.JsonPayload)
 	case nil:
@@ -471,27 +471,27 @@
 	// result
 	switch x := m.Result.(type) {
 	case *ConformanceResponse_ParseError:
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.ParseError)))
 		n += len(x.ParseError)
 	case *ConformanceResponse_SerializeError:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.SerializeError)))
 		n += len(x.SerializeError)
 	case *ConformanceResponse_RuntimeError:
-		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.RuntimeError)))
 		n += len(x.RuntimeError)
 	case *ConformanceResponse_ProtobufPayload:
-		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
 		n += len(x.ProtobufPayload)
 	case *ConformanceResponse_JsonPayload:
-		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
 		n += len(x.JsonPayload)
 	case *ConformanceResponse_Skipped:
-		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Skipped)))
 		n += len(x.Skipped)
 	case nil:
@@ -1678,35 +1678,35 @@
 	// oneof_field
 	switch x := m.OneofField.(type) {
 	case *TestAllTypes_OneofUint32:
-		n += proto.SizeVarint(111<<3 | proto.WireVarint)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(x.OneofUint32))
 	case *TestAllTypes_OneofNestedMessage:
 		s := proto.Size(x.OneofNestedMessage)
-		n += proto.SizeVarint(112<<3 | proto.WireBytes)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *TestAllTypes_OneofString:
-		n += proto.SizeVarint(113<<3 | proto.WireBytes)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.OneofString)))
 		n += len(x.OneofString)
 	case *TestAllTypes_OneofBytes:
-		n += proto.SizeVarint(114<<3 | proto.WireBytes)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.OneofBytes)))
 		n += len(x.OneofBytes)
 	case *TestAllTypes_OneofBool:
-		n += proto.SizeVarint(115<<3 | proto.WireVarint)
+		n += 2 // tag and wire
 		n += 1
 	case *TestAllTypes_OneofUint64:
-		n += proto.SizeVarint(116<<3 | proto.WireVarint)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(x.OneofUint64))
 	case *TestAllTypes_OneofFloat:
-		n += proto.SizeVarint(117<<3 | proto.WireFixed32)
+		n += 2 // tag and wire
 		n += 4
 	case *TestAllTypes_OneofDouble:
-		n += proto.SizeVarint(118<<3 | proto.WireFixed64)
+		n += 2 // tag and wire
 		n += 8
 	case *TestAllTypes_OneofEnum:
-		n += proto.SizeVarint(119<<3 | proto.WireVarint)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(x.OneofEnum))
 	case nil:
 	default:
diff --git a/jsonpb/jsonpb_test_proto/test_objects.pb.go b/jsonpb/jsonpb_test_proto/test_objects.pb.go
index 5809d01..77ae78a 100644
--- a/jsonpb/jsonpb_test_proto/test_objects.pb.go
+++ b/jsonpb/jsonpb_test_proto/test_objects.pb.go
@@ -697,23 +697,23 @@
 	// union
 	switch x := m.Union.(type) {
 	case *MsgWithOneof_Title:
-		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Title)))
 		n += len(x.Title)
 	case *MsgWithOneof_Salary:
-		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.Salary))
 	case *MsgWithOneof_Country:
-		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Country)))
 		n += len(x.Country)
 	case *MsgWithOneof_HomeAddress:
-		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.HomeAddress)))
 		n += len(x.HomeAddress)
 	case *MsgWithOneof_MsgWithRequired:
 		s := proto.Size(x.MsgWithRequired)
-		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
diff --git a/proto/test_proto/test.pb.go b/proto/test_proto/test.pb.go
index b688612..f8883c3 100644
--- a/proto/test_proto/test.pb.go
+++ b/proto/test_proto/test.pb.go
@@ -3545,60 +3545,60 @@
 	// union
 	switch x := m.Union.(type) {
 	case *Oneof_F_Bool:
-		n += proto.SizeVarint(1<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += 1
 	case *Oneof_F_Int32:
-		n += proto.SizeVarint(2<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Int32))
 	case *Oneof_F_Int64:
-		n += proto.SizeVarint(3<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Int64))
 	case *Oneof_F_Fixed32:
-		n += proto.SizeVarint(4<<3 | proto.WireFixed32)
+		n += 1 // tag and wire
 		n += 4
 	case *Oneof_F_Fixed64:
-		n += proto.SizeVarint(5<<3 | proto.WireFixed64)
+		n += 1 // tag and wire
 		n += 8
 	case *Oneof_F_Uint32:
-		n += proto.SizeVarint(6<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Uint32))
 	case *Oneof_F_Uint64:
-		n += proto.SizeVarint(7<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Uint64))
 	case *Oneof_F_Float:
-		n += proto.SizeVarint(8<<3 | proto.WireFixed32)
+		n += 1 // tag and wire
 		n += 4
 	case *Oneof_F_Double:
-		n += proto.SizeVarint(9<<3 | proto.WireFixed64)
+		n += 1 // tag and wire
 		n += 8
 	case *Oneof_F_String:
-		n += proto.SizeVarint(10<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.F_String)))
 		n += len(x.F_String)
 	case *Oneof_F_Bytes:
-		n += proto.SizeVarint(11<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.F_Bytes)))
 		n += len(x.F_Bytes)
 	case *Oneof_F_Sint32:
-		n += proto.SizeVarint(12<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64((uint32(x.F_Sint32) << 1) ^ uint32((int32(x.F_Sint32) >> 31))))
 	case *Oneof_F_Sint64:
-		n += proto.SizeVarint(13<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(uint64(x.F_Sint64<<1) ^ uint64((int64(x.F_Sint64) >> 63))))
 	case *Oneof_F_Enum:
-		n += proto.SizeVarint(14<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Enum))
 	case *Oneof_F_Message:
 		s := proto.Size(x.F_Message)
-		n += proto.SizeVarint(15<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *Oneof_FGroup:
-		n += proto.SizeVarint(16<<3 | proto.WireStartGroup)
+		n += 2 // tag and wire
 		n += proto.Size(x.FGroup)
-		n += proto.SizeVarint(16<<3 | proto.WireEndGroup)
+		n += 2 // tag and wire
 	case *Oneof_F_Largest_Tag:
-		n += proto.SizeVarint(536870911<<3 | proto.WireVarint)
+		n += 10 // tag and wire
 		n += proto.SizeVarint(uint64(x.F_Largest_Tag))
 	case nil:
 	default:
@@ -3607,7 +3607,7 @@
 	// tormato
 	switch x := m.Tormato.(type) {
 	case *Oneof_Value:
-		n += proto.SizeVarint(100<<3 | proto.WireVarint)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(x.Value))
 	case nil:
 	default:
@@ -3880,25 +3880,25 @@
 	// union
 	switch x := m.Union.(type) {
 	case *Communique_Number:
-		n += proto.SizeVarint(5<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.Number))
 	case *Communique_Name:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Name)))
 		n += len(x.Name)
 	case *Communique_Data:
-		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Data)))
 		n += len(x.Data)
 	case *Communique_TempC:
-		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
+		n += 1 // tag and wire
 		n += 8
 	case *Communique_Col:
-		n += proto.SizeVarint(9<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.Col))
 	case *Communique_Msg:
 		s := proto.Size(x.Msg)
-		n += proto.SizeVarint(10<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil:
diff --git a/protoc-gen-go/generator/generator.go b/protoc-gen-go/generator/generator.go
index d8e512e..6e1b72c 100644
--- a/protoc-gen-go/generator/generator.go
+++ b/protoc-gen-go/generator/generator.go
@@ -2624,58 +2624,49 @@
 				}
 				g.P("case *", oneofTypeName[field], ":")
 				val := "x." + fieldNames[field]
-				var wire, varint, fixed string
+				var varint, fixed string
 				switch *field.Type {
 				case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
-					wire = "WireFixed64"
 					fixed = "8"
 				case descriptor.FieldDescriptorProto_TYPE_FLOAT:
-					wire = "WireFixed32"
 					fixed = "4"
 				case descriptor.FieldDescriptorProto_TYPE_INT64,
 					descriptor.FieldDescriptorProto_TYPE_UINT64,
 					descriptor.FieldDescriptorProto_TYPE_INT32,
 					descriptor.FieldDescriptorProto_TYPE_UINT32,
 					descriptor.FieldDescriptorProto_TYPE_ENUM:
-					wire = "WireVarint"
 					varint = val
 				case descriptor.FieldDescriptorProto_TYPE_FIXED64,
 					descriptor.FieldDescriptorProto_TYPE_SFIXED64:
-					wire = "WireFixed64"
 					fixed = "8"
 				case descriptor.FieldDescriptorProto_TYPE_FIXED32,
 					descriptor.FieldDescriptorProto_TYPE_SFIXED32:
-					wire = "WireFixed32"
 					fixed = "4"
 				case descriptor.FieldDescriptorProto_TYPE_BOOL:
-					wire = "WireVarint"
 					fixed = "1"
 				case descriptor.FieldDescriptorProto_TYPE_STRING:
-					wire = "WireBytes"
 					fixed = "len(" + val + ")"
 					varint = fixed
 				case descriptor.FieldDescriptorProto_TYPE_GROUP:
-					wire = "WireStartGroup"
 					fixed = g.Pkg["proto"] + ".Size(" + val + ")"
 				case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
-					wire = "WireBytes"
 					g.P("s := ", g.Pkg["proto"], ".Size(", val, ")")
 					fixed = "s"
 					varint = fixed
 				case descriptor.FieldDescriptorProto_TYPE_BYTES:
-					wire = "WireBytes"
 					fixed = "len(" + val + ")"
 					varint = fixed
 				case descriptor.FieldDescriptorProto_TYPE_SINT32:
-					wire = "WireVarint"
 					varint = "(uint32(" + val + ") << 1) ^ uint32((int32(" + val + ") >> 31))"
 				case descriptor.FieldDescriptorProto_TYPE_SINT64:
-					wire = "WireVarint"
 					varint = "uint64(" + val + " << 1) ^ uint64((int64(" + val + ") >> 63))"
 				default:
 					g.Fail("unhandled oneof field type ", field.Type.String())
 				}
-				g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".", wire, ")")
+				// Tag and wire varint is known statically,
+				// so don't generate code for that part of the size computation.
+				tagAndWireSize := proto.SizeVarint(uint64(*field.Number << 3)) // wire doesn't affect varint size
+				g.P("n += ", tagAndWireSize, " // tag and wire")
 				if varint != "" {
 					g.P("n += ", g.Pkg["proto"], ".SizeVarint(uint64(", varint, "))")
 				}
@@ -2683,7 +2674,7 @@
 					g.P("n += ", fixed)
 				}
 				if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP {
-					g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".WireEndGroup)")
+					g.P("n += ", tagAndWireSize, " // tag and wire")
 				}
 			}
 			g.P("case nil:")
diff --git a/protoc-gen-go/testdata/imp/imp.pb.go b/protoc-gen-go/testdata/imp/imp.pb.go
index 750f6a1..b781ae2 100644
--- a/protoc-gen-go/testdata/imp/imp.pb.go
+++ b/protoc-gen-go/testdata/imp/imp.pb.go
@@ -226,7 +226,7 @@
 	// union
 	switch x := m.Union.(type) {
 	case *ImportedMessage_State:
-		n += proto.SizeVarint(9<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.State))
 	case nil:
 	default:
diff --git a/protoc-gen-go/testdata/my_test/test.pb.go b/protoc-gen-go/testdata/my_test/test.pb.go
index 0fe65e2..bad905e 100644
--- a/protoc-gen-go/testdata/my_test/test.pb.go
+++ b/protoc-gen-go/testdata/my_test/test.pb.go
@@ -57,7 +57,7 @@
 	return nil
 }
 func (HatType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{0}
+	return fileDescriptor_test_2309d445eee26af7, []int{0}
 }
 
 // This enum represents days of the week.
@@ -97,7 +97,7 @@
 	return nil
 }
 func (Days) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{1}
+	return fileDescriptor_test_2309d445eee26af7, []int{1}
 }
 
 type Request_Color int32
@@ -136,7 +136,7 @@
 	return nil
 }
 func (Request_Color) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{0, 0}
+	return fileDescriptor_test_2309d445eee26af7, []int{0, 0}
 }
 
 type Reply_Entry_Game int32
@@ -172,7 +172,7 @@
 	return nil
 }
 func (Reply_Entry_Game) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{1, 0, 0}
+	return fileDescriptor_test_2309d445eee26af7, []int{1, 0, 0}
 }
 
 // This is a message that might be sent somewhere.
@@ -200,7 +200,7 @@
 func (m *Request) String() string { return proto.CompactTextString(m) }
 func (*Request) ProtoMessage()    {}
 func (*Request) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{0}
+	return fileDescriptor_test_2309d445eee26af7, []int{0}
 }
 func (m *Request) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Request.Unmarshal(m, b)
@@ -298,7 +298,7 @@
 func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) }
 func (*Request_SomeGroup) ProtoMessage()    {}
 func (*Request_SomeGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{0, 0}
+	return fileDescriptor_test_2309d445eee26af7, []int{0, 0}
 }
 func (m *Request_SomeGroup) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Request_SomeGroup.Unmarshal(m, b)
@@ -338,7 +338,7 @@
 func (m *Reply) String() string { return proto.CompactTextString(m) }
 func (*Reply) ProtoMessage()    {}
 func (*Reply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{1}
+	return fileDescriptor_test_2309d445eee26af7, []int{1}
 }
 
 var extRange_Reply = []proto.ExtensionRange{
@@ -393,7 +393,7 @@
 func (m *Reply_Entry) String() string { return proto.CompactTextString(m) }
 func (*Reply_Entry) ProtoMessage()    {}
 func (*Reply_Entry) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{1, 0}
+	return fileDescriptor_test_2309d445eee26af7, []int{1, 0}
 }
 func (m *Reply_Entry) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Reply_Entry.Unmarshal(m, b)
@@ -448,7 +448,7 @@
 func (m *OtherBase) String() string { return proto.CompactTextString(m) }
 func (*OtherBase) ProtoMessage()    {}
 func (*OtherBase) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{2}
+	return fileDescriptor_test_2309d445eee26af7, []int{2}
 }
 
 var extRange_OtherBase = []proto.ExtensionRange{
@@ -493,7 +493,7 @@
 func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) }
 func (*ReplyExtensions) ProtoMessage()    {}
 func (*ReplyExtensions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{3}
+	return fileDescriptor_test_2309d445eee26af7, []int{3}
 }
 func (m *ReplyExtensions) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ReplyExtensions.Unmarshal(m, b)
@@ -551,7 +551,7 @@
 func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) }
 func (*OtherReplyExtensions) ProtoMessage()    {}
 func (*OtherReplyExtensions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{4}
+	return fileDescriptor_test_2309d445eee26af7, []int{4}
 }
 func (m *OtherReplyExtensions) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OtherReplyExtensions.Unmarshal(m, b)
@@ -589,7 +589,7 @@
 func (m *OldReply) String() string { return proto.CompactTextString(m) }
 func (*OldReply) ProtoMessage()    {}
 func (*OldReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{5}
+	return fileDescriptor_test_2309d445eee26af7, []int{5}
 }
 
 func (m *OldReply) MarshalJSON() ([]byte, error) {
@@ -649,7 +649,7 @@
 func (m *Communique) String() string { return proto.CompactTextString(m) }
 func (*Communique) ProtoMessage()    {}
 func (*Communique) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{6}
+	return fileDescriptor_test_2309d445eee26af7, []int{6}
 }
 func (m *Communique) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Communique.Unmarshal(m, b)
@@ -698,7 +698,7 @@
 	Delta int32 `protobuf:"zigzag32,12,opt,name=delta,oneof"`
 }
 type Communique_Msg struct {
-	Msg *Reply `protobuf:"bytes,13,opt,name=msg,oneof"`
+	Msg *Reply `protobuf:"bytes,16,opt,name=msg,oneof"`
 }
 type Communique_Somegroup struct {
 	Somegroup *Communique_SomeGroup `protobuf:"group,14,opt,name=SomeGroup,json=somegroup,oneof"`
@@ -848,7 +848,7 @@
 		b.EncodeVarint(12<<3 | proto.WireVarint)
 		b.EncodeZigzag32(uint64(x.Delta))
 	case *Communique_Msg:
-		b.EncodeVarint(13<<3 | proto.WireBytes)
+		b.EncodeVarint(16<<3 | proto.WireBytes)
 		if err := b.EncodeMessage(x.Msg); err != nil {
 			return err
 		}
@@ -924,7 +924,7 @@
 		x, err := b.DecodeZigzag32()
 		m.Union = &Communique_Delta_{int32(x)}
 		return true, err
-	case 13: // union.msg
+	case 16: // union.msg
 		if wire != proto.WireBytes {
 			return true, proto.ErrInternalBadWireType
 		}
@@ -950,40 +950,40 @@
 	// union
 	switch x := m.Union.(type) {
 	case *Communique_Number:
-		n += proto.SizeVarint(5<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.Number))
 	case *Communique_Name:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Name)))
 		n += len(x.Name)
 	case *Communique_Data:
-		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.Data)))
 		n += len(x.Data)
 	case *Communique_TempC:
-		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
+		n += 1 // tag and wire
 		n += 8
 	case *Communique_Height:
-		n += proto.SizeVarint(9<<3 | proto.WireFixed32)
+		n += 1 // tag and wire
 		n += 4
 	case *Communique_Today:
-		n += proto.SizeVarint(10<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.Today))
 	case *Communique_Maybe:
-		n += proto.SizeVarint(11<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += 1
 	case *Communique_Delta_:
-		n += proto.SizeVarint(12<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64((uint32(x.Delta) << 1) ^ uint32((int32(x.Delta) >> 31))))
 	case *Communique_Msg:
 		s := proto.Size(x.Msg)
-		n += proto.SizeVarint(13<<3 | proto.WireBytes)
+		n += 2 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *Communique_Somegroup:
-		n += proto.SizeVarint(14<<3 | proto.WireStartGroup)
+		n += 1 // tag and wire
 		n += proto.Size(x.Somegroup)
-		n += proto.SizeVarint(14<<3 | proto.WireEndGroup)
+		n += 1 // tag and wire
 	case nil:
 	default:
 		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
@@ -1002,7 +1002,7 @@
 func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) }
 func (*Communique_SomeGroup) ProtoMessage()    {}
 func (*Communique_SomeGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{6, 0}
+	return fileDescriptor_test_2309d445eee26af7, []int{6, 0}
 }
 func (m *Communique_SomeGroup) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Communique_SomeGroup.Unmarshal(m, b)
@@ -1039,7 +1039,7 @@
 func (m *Communique_Delta) String() string { return proto.CompactTextString(m) }
 func (*Communique_Delta) ProtoMessage()    {}
 func (*Communique_Delta) Descriptor() ([]byte, []int) {
-	return fileDescriptor_test_4c0531be33cf90ba, []int{6, 1}
+	return fileDescriptor_test_2309d445eee26af7, []int{6, 1}
 }
 func (m *Communique_Delta) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Communique_Delta.Unmarshal(m, b)
@@ -1102,73 +1102,73 @@
 	proto.RegisterExtension(E_Donut)
 }
 
-func init() { proto.RegisterFile("my_test/test.proto", fileDescriptor_test_4c0531be33cf90ba) }
+func init() { proto.RegisterFile("my_test/test.proto", fileDescriptor_test_2309d445eee26af7) }
 
-var fileDescriptor_test_4c0531be33cf90ba = []byte{
-	// 1035 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdb, 0x6e, 0xdb, 0x46,
-	0x13, 0xd6, 0x92, 0xa2, 0x0e, 0x23, 0xc5, 0xe6, 0xbf, 0x30, 0x6c, 0x42, 0x3f, 0x12, 0xb3, 0x6a,
-	0x5d, 0xb0, 0x46, 0x23, 0x23, 0x6a, 0x81, 0x06, 0x2a, 0x1a, 0xc4, 0x3a, 0xd8, 0x32, 0x62, 0x49,
-	0xc0, 0xda, 0xbe, 0x68, 0x6e, 0x88, 0xb5, 0xb8, 0xa6, 0x58, 0x6b, 0x49, 0x85, 0x5c, 0x16, 0xe5,
-	0x9d, 0x9f, 0xa2, 0x7d, 0x8d, 0xde, 0xf7, 0x85, 0xfa, 0x16, 0x2e, 0x76, 0xa9, 0x4a, 0xb2, 0x15,
-	0xf4, 0x86, 0xe0, 0xcc, 0x7c, 0xf3, 0x71, 0xe7, 0xc0, 0x6f, 0x01, 0xf3, 0xcc, 0x15, 0x2c, 0x11,
-	0x27, 0xf2, 0xd1, 0x5a, 0xc4, 0x91, 0x88, 0x70, 0x99, 0x67, 0x2d, 0x69, 0x36, 0x30, 0x4f, 0xe7,
-	0x22, 0x38, 0x51, 0xcf, 0x37, 0x79, 0xb0, 0xf9, 0x77, 0x11, 0xca, 0x84, 0x7d, 0x4a, 0x59, 0x22,
-	0xb0, 0x09, 0xfa, 0x3d, 0xcb, 0x2c, 0x64, 0xeb, 0x8e, 0x4e, 0xe4, 0x2b, 0x76, 0x40, 0x9f, 0xa5,
-	0xcc, 0xd2, 0x6d, 0xe4, 0xec, 0xb4, 0xf7, 0x5b, 0x4b, 0xa2, 0xd6, 0x32, 0xa1, 0xd5, 0x8b, 0xe6,
-	0x51, 0x4c, 0x24, 0x04, 0x1f, 0x83, 0x3e, 0xa3, 0xc2, 0x2a, 0x2a, 0xa4, 0xb9, 0x42, 0x0e, 0xa9,
-	0xb8, 0xce, 0x16, 0xac, 0x53, 0x3a, 0x1b, 0xf4, 0x27, 0xe4, 0x94, 0x48, 0x10, 0x3e, 0x84, 0x8a,
-	0xc7, 0xa8, 0x37, 0x0f, 0x42, 0x66, 0x95, 0x6d, 0xe4, 0x68, 0x1d, 0x3d, 0x08, 0xef, 0xc8, 0xca,
-	0x89, 0xdf, 0x42, 0x35, 0x89, 0x38, 0xf3, 0xe3, 0x28, 0x5d, 0x58, 0x15, 0x1b, 0x39, 0xd0, 0x6e,
-	0x6c, 0x7d, 0xfc, 0x2a, 0xe2, 0xec, 0x5c, 0x22, 0xc8, 0x1a, 0x8c, 0xfb, 0x50, 0x0f, 0x29, 0x67,
-	0x2e, 0xa7, 0x8b, 0x45, 0x10, 0xfa, 0xd6, 0x8e, 0xad, 0x3b, 0xb5, 0xf6, 0x17, 0x5b, 0xc9, 0x63,
-	0xca, 0xd9, 0x28, 0xc7, 0x0c, 0x42, 0x11, 0x67, 0xa4, 0x16, 0xae, 0x3d, 0xf8, 0x14, 0x6a, 0x3c,
-	0xf1, 0x57, 0x24, 0xbb, 0x8a, 0xc4, 0xde, 0x22, 0x19, 0x25, 0xfe, 0x13, 0x0e, 0xe0, 0x2b, 0x07,
-	0xde, 0x03, 0x23, 0x66, 0x09, 0x13, 0x56, 0xdd, 0x46, 0x8e, 0x41, 0x72, 0x03, 0x1f, 0x40, 0xd9,
-	0x67, 0xc2, 0x95, 0x5d, 0x36, 0x6d, 0xe4, 0x54, 0x49, 0xc9, 0x67, 0xe2, 0x03, 0xcb, 0x1a, 0xdf,
-	0x42, 0x75, 0x55, 0x0f, 0x3e, 0x84, 0x9a, 0xaa, 0xc6, 0xbd, 0x0b, 0xd8, 0xdc, 0xb3, 0xaa, 0x8a,
-	0x01, 0x94, 0xeb, 0x4c, 0x7a, 0x1a, 0xef, 0xc0, 0x7c, 0x5e, 0xc0, 0x7a, 0x78, 0x12, 0xac, 0x86,
-	0xb7, 0x07, 0xc6, 0xaf, 0x74, 0x9e, 0x32, 0x4b, 0x53, 0x9f, 0xca, 0x8d, 0x8e, 0xf6, 0x16, 0x35,
-	0x46, 0xb0, 0xfb, 0xec, 0xec, 0x9b, 0xe9, 0x38, 0x4f, 0xff, 0x6a, 0x33, 0xbd, 0xd6, 0xde, 0xd9,
-	0x28, 0x7f, 0x31, 0xcf, 0x36, 0xe8, 0x9a, 0x47, 0x60, 0xa8, 0x4d, 0xc0, 0x65, 0xd0, 0xc9, 0xa0,
-	0x6f, 0x16, 0x70, 0x15, 0x8c, 0x73, 0x32, 0x18, 0x8c, 0x4d, 0x84, 0x2b, 0x50, 0xec, 0x5e, 0xde,
-	0x0c, 0x4c, 0xad, 0xf9, 0x87, 0x06, 0x86, 0xca, 0xc5, 0xc7, 0x60, 0xdc, 0x45, 0x69, 0xe8, 0xa9,
-	0x55, 0xab, 0xb5, 0xf7, 0x9e, 0x52, 0xb7, 0xf2, 0x6e, 0xe6, 0x10, 0x7c, 0x04, 0xf5, 0x69, 0xc4,
-	0x17, 0x74, 0xaa, 0xda, 0x96, 0x58, 0x9a, 0xad, 0x3b, 0x46, 0x57, 0x33, 0x11, 0xa9, 0x2d, 0xfd,
-	0x1f, 0x58, 0x96, 0x34, 0xfe, 0x44, 0x60, 0xe4, 0x95, 0xf4, 0xe1, 0xf0, 0x9e, 0x65, 0xae, 0x98,
-	0x51, 0xe1, 0x86, 0x8c, 0x79, 0x89, 0xfb, 0xa6, 0xfd, 0xdd, 0xf7, 0x53, 0xca, 0xd9, 0xdc, 0xed,
-	0xd1, 0xe4, 0x22, 0xf4, 0x2d, 0x64, 0x6b, 0x8e, 0x4e, 0xfe, 0x7f, 0xcf, 0xb2, 0xeb, 0x19, 0x15,
-	0x63, 0x09, 0x5a, 0x61, 0x72, 0x08, 0x3e, 0xd8, 0xac, 0x5e, 0xef, 0xa0, 0x1f, 0x96, 0x05, 0xe3,
-	0xaf, 0xc1, 0x74, 0x79, 0x96, 0x8f, 0xc6, 0x55, 0xbb, 0xd6, 0x56, 0xff, 0x87, 0x4e, 0xea, 0xa3,
-	0x4c, 0x8d, 0x47, 0x8e, 0xa6, 0xdd, 0xb4, 0xa1, 0x78, 0x4e, 0x39, 0xc3, 0x75, 0xa8, 0x9c, 0x4d,
-	0x26, 0xd7, 0xdd, 0xd3, 0xcb, 0x4b, 0x13, 0x61, 0x80, 0xd2, 0xf5, 0x60, 0x3c, 0xbe, 0xb8, 0x32,
-	0xb5, 0xe3, 0x4a, 0xc5, 0x33, 0x1f, 0x1e, 0x1e, 0x1e, 0xb4, 0xe6, 0x37, 0x50, 0x9d, 0x88, 0x19,
-	0x8b, 0xbb, 0x34, 0x61, 0x18, 0x43, 0x51, 0xd2, 0xaa, 0x51, 0x54, 0x89, 0x7a, 0xdf, 0x80, 0xfe,
-	0x85, 0x60, 0x57, 0x75, 0x69, 0xf0, 0x9b, 0x60, 0x61, 0x12, 0x44, 0x61, 0xd2, 0x6e, 0x42, 0x51,
-	0x04, 0x9c, 0xe1, 0x67, 0x23, 0xb2, 0x98, 0x8d, 0x1c, 0x44, 0x54, 0xac, 0xfd, 0x1e, 0x4a, 0x53,
-	0x1a, 0xc7, 0x91, 0xd8, 0x42, 0x05, 0x6a, 0xbc, 0xd6, 0x53, 0xef, 0x9a, 0x9d, 0x2c, 0xf3, 0xda,
-	0x5d, 0x30, 0xbc, 0x28, 0x4c, 0x05, 0xc6, 0x2b, 0xe8, 0xea, 0xd0, 0xea, 0x53, 0xff, 0x45, 0x92,
-	0xa7, 0x36, 0x1d, 0xd8, 0x53, 0x39, 0xcf, 0xc2, 0xdb, 0xcb, 0xdb, 0xb4, 0xa0, 0x32, 0x99, 0x7b,
-	0x0a, 0xa7, 0xaa, 0x7f, 0x7c, 0x7c, 0x7c, 0x2c, 0x77, 0xb4, 0x0a, 0x6a, 0xfe, 0xae, 0x03, 0xf4,
-	0x22, 0xce, 0xd3, 0x30, 0xf8, 0x94, 0x32, 0xfc, 0x0a, 0x6a, 0x9c, 0xde, 0x33, 0x97, 0x33, 0x77,
-	0x1a, 0xe7, 0x14, 0x15, 0x52, 0x95, 0xae, 0x11, 0xeb, 0xc5, 0x19, 0xb6, 0xa0, 0x14, 0xa6, 0xfc,
-	0x96, 0xc5, 0x96, 0x21, 0xd9, 0x87, 0x05, 0xb2, 0xb4, 0xf1, 0xde, 0xb2, 0xd1, 0x25, 0xd9, 0xe8,
-	0x61, 0x21, 0x6f, 0xb5, 0xf4, 0x7a, 0x54, 0x50, 0x25, 0x4c, 0x75, 0xe9, 0x95, 0x16, 0x3e, 0x80,
-	0x92, 0x60, 0x7c, 0xe1, 0x4e, 0x95, 0x1c, 0xa1, 0x61, 0x81, 0x18, 0xd2, 0xee, 0x49, 0xfa, 0x19,
-	0x0b, 0xfc, 0x99, 0x50, 0xbf, 0xa9, 0x26, 0xe9, 0x73, 0x1b, 0x1f, 0x81, 0x21, 0x22, 0x8f, 0x66,
-	0x16, 0x28, 0x4d, 0x7c, 0xb1, 0xea, 0x4d, 0x9f, 0x66, 0x89, 0x22, 0x90, 0x51, 0xbc, 0x0f, 0x06,
-	0xa7, 0xd9, 0x2d, 0xb3, 0x6a, 0xf2, 0xe4, 0xd2, 0xaf, 0x4c, 0xe9, 0xf7, 0xd8, 0x5c, 0x50, 0x25,
-	0x20, 0xff, 0x93, 0x7e, 0x65, 0xe2, 0x26, 0xe8, 0x3c, 0xf1, 0xad, 0x17, 0x9f, 0xfb, 0x29, 0x87,
-	0x05, 0x22, 0x83, 0xf8, 0xa7, 0x4d, 0xfd, 0xdc, 0x51, 0xfa, 0xf9, 0x72, 0x85, 0x5c, 0xf7, 0x6e,
-	0x2d, 0xa1, 0xc3, 0xc2, 0x86, 0x88, 0x36, 0xbe, 0xdc, 0x14, 0xa3, 0x7d, 0x28, 0x71, 0xa6, 0xfa,
-	0xb7, 0x9b, 0x2b, 0x56, 0x6e, 0x35, 0xca, 0x60, 0xf4, 0xe5, 0x81, 0xba, 0x65, 0x30, 0xd2, 0x30,
-	0x88, 0xc2, 0xe3, 0x57, 0x50, 0x5e, 0xca, 0xbd, 0x5c, 0xf3, 0x5c, 0xf0, 0x4d, 0x24, 0x45, 0xe1,
-	0x6c, 0xf0, 0xd1, 0xd4, 0x8e, 0x5b, 0x50, 0x94, 0xa5, 0xcb, 0xe0, 0x68, 0x32, 0xee, 0x9f, 0xfe,
-	0x6c, 0x22, 0x5c, 0x83, 0xf2, 0xf5, 0xcd, 0xe0, 0x4a, 0x1a, 0x9a, 0x54, 0x8d, 0xcb, 0x9b, 0x71,
-	0xff, 0xc2, 0x44, 0x0d, 0xcd, 0x44, 0x1d, 0x1b, 0x74, 0x41, 0xfd, 0xad, 0x7d, 0xf5, 0xd5, 0x31,
-	0x64, 0xa8, 0xd3, 0xfb, 0x77, 0x25, 0x9f, 0x63, 0x7e, 0x51, 0xdd, 0x79, 0xf9, 0x74, 0x51, 0x3f,
-	0xbf, 0x93, 0xdd, 0xf7, 0x1f, 0xdf, 0xf9, 0x81, 0x98, 0xa5, 0xb7, 0xad, 0x69, 0xc4, 0x4f, 0xfc,
-	0x68, 0x4e, 0x43, 0xff, 0x44, 0x5d, 0x8e, 0xb7, 0xe9, 0x5d, 0xfe, 0x32, 0x7d, 0xed, 0xb3, 0xf0,
-	0xb5, 0x1f, 0xa9, 0x5b, 0x55, 0xee, 0xc3, 0xc9, 0xf2, 0x9a, 0xfd, 0x51, 0x3e, 0xfe, 0x09, 0x00,
-	0x00, 0xff, 0xff, 0x0d, 0xa4, 0x7d, 0x7c, 0x75, 0x07, 0x00, 0x00,
+var fileDescriptor_test_2309d445eee26af7 = []byte{
+	// 1033 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdd, 0x6e, 0xe3, 0x44,
+	0x14, 0xce, 0xd8, 0x71, 0x7e, 0x4e, 0x42, 0x6b, 0x46, 0x55, 0x6b, 0x05, 0xed, 0xd6, 0x04, 0x8a,
+	0x4c, 0xc5, 0xa6, 0xda, 0x80, 0xc4, 0x2a, 0x88, 0xd5, 0x36, 0x3f, 0x6d, 0xaa, 0x6d, 0x12, 0x69,
+	0xda, 0x5e, 0xb0, 0x37, 0xd6, 0x34, 0x9e, 0x3a, 0xa6, 0x19, 0x3b, 0x6b, 0x8f, 0x11, 0xbe, 0xeb,
+	0x53, 0xc0, 0x6b, 0x70, 0xcf, 0x0b, 0xf1, 0x16, 0x45, 0x33, 0x0e, 0x49, 0xda, 0xa0, 0xbd, 0xb1,
+	0x7c, 0xce, 0xf9, 0xce, 0xe7, 0x39, 0x3f, 0xfe, 0x06, 0x30, 0xcf, 0x5c, 0xc1, 0x12, 0x71, 0x22,
+	0x1f, 0xad, 0x45, 0x1c, 0x89, 0x08, 0x97, 0x79, 0xd6, 0x92, 0x66, 0x03, 0xf3, 0x74, 0x2e, 0x82,
+	0x13, 0xf5, 0x7c, 0x9d, 0x07, 0x9b, 0xff, 0x14, 0xa1, 0x4c, 0xd8, 0xc7, 0x94, 0x25, 0x02, 0x9b,
+	0xa0, 0xdf, 0xb3, 0xcc, 0x42, 0xb6, 0xee, 0xe8, 0x44, 0xbe, 0x62, 0x07, 0xf4, 0x59, 0xca, 0x2c,
+	0xdd, 0x46, 0xce, 0x4e, 0x7b, 0xbf, 0xb5, 0x24, 0x6a, 0x2d, 0x13, 0x5a, 0xbd, 0x68, 0x1e, 0xc5,
+	0x44, 0x42, 0xf0, 0x31, 0xe8, 0x33, 0x2a, 0xac, 0xa2, 0x42, 0x9a, 0x2b, 0xe4, 0x90, 0x8a, 0xeb,
+	0x6c, 0xc1, 0x3a, 0xa5, 0xb3, 0x41, 0x7f, 0x42, 0x4e, 0x89, 0x04, 0xe1, 0x43, 0xa8, 0x78, 0x8c,
+	0x7a, 0xf3, 0x20, 0x64, 0x56, 0xd9, 0x46, 0x8e, 0xd6, 0xd1, 0x83, 0xf0, 0x8e, 0xac, 0x9c, 0xf8,
+	0x0d, 0x54, 0x93, 0x88, 0x33, 0x3f, 0x8e, 0xd2, 0x85, 0x55, 0xb1, 0x91, 0x03, 0xed, 0xc6, 0xd6,
+	0xc7, 0xaf, 0x22, 0xce, 0xce, 0x25, 0x82, 0xac, 0xc1, 0xb8, 0x0f, 0xf5, 0x90, 0x72, 0xe6, 0x72,
+	0xba, 0x58, 0x04, 0xa1, 0x6f, 0xed, 0xd8, 0xba, 0x53, 0x6b, 0x7f, 0xb9, 0x95, 0x3c, 0xa6, 0x9c,
+	0x8d, 0x72, 0xcc, 0x20, 0x14, 0x71, 0x46, 0x6a, 0xe1, 0xda, 0x83, 0x4f, 0xa1, 0xc6, 0x13, 0x7f,
+	0x45, 0xb2, 0xab, 0x48, 0xec, 0x2d, 0x92, 0x51, 0xe2, 0x3f, 0xe1, 0x00, 0xbe, 0x72, 0xe0, 0x3d,
+	0x30, 0x62, 0x96, 0x30, 0x61, 0xd5, 0x6d, 0xe4, 0x18, 0x24, 0x37, 0xf0, 0x01, 0x94, 0x7d, 0x26,
+	0x5c, 0xd9, 0x65, 0xd3, 0x46, 0x4e, 0x95, 0x94, 0x7c, 0x26, 0xde, 0xb3, 0xac, 0xf1, 0x1d, 0x54,
+	0x57, 0xf5, 0xe0, 0x43, 0xa8, 0xa9, 0x6a, 0xdc, 0xbb, 0x80, 0xcd, 0x3d, 0xab, 0xaa, 0x18, 0x40,
+	0xb9, 0xce, 0xa4, 0xa7, 0xf1, 0x16, 0xcc, 0xe7, 0x05, 0xac, 0x87, 0x27, 0xc1, 0x6a, 0x78, 0x7b,
+	0x60, 0xfc, 0x46, 0xe7, 0x29, 0xb3, 0x34, 0xf5, 0xa9, 0xdc, 0xe8, 0x68, 0x6f, 0x50, 0x63, 0x04,
+	0xbb, 0xcf, 0xce, 0xbe, 0x99, 0x8e, 0xf3, 0xf4, 0xaf, 0x37, 0xd3, 0x6b, 0xed, 0x9d, 0x8d, 0xf2,
+	0x17, 0xf3, 0x6c, 0x83, 0xae, 0x79, 0x04, 0x86, 0xda, 0x04, 0x5c, 0x06, 0x9d, 0x0c, 0xfa, 0x66,
+	0x01, 0x57, 0xc1, 0x38, 0x27, 0x83, 0xc1, 0xd8, 0x44, 0xb8, 0x02, 0xc5, 0xee, 0xe5, 0xcd, 0xc0,
+	0xd4, 0x9a, 0x7f, 0x6a, 0x60, 0xa8, 0x5c, 0x7c, 0x0c, 0xc6, 0x5d, 0x94, 0x86, 0x9e, 0x5a, 0xb5,
+	0x5a, 0x7b, 0xef, 0x29, 0x75, 0x2b, 0xef, 0x66, 0x0e, 0xc1, 0x47, 0x50, 0x9f, 0x46, 0x7c, 0x41,
+	0xa7, 0xaa, 0x6d, 0x89, 0xa5, 0xd9, 0xba, 0x63, 0x74, 0x35, 0x13, 0x91, 0xda, 0xd2, 0xff, 0x9e,
+	0x65, 0x49, 0xe3, 0x2f, 0x04, 0x46, 0x5e, 0x49, 0x1f, 0x0e, 0xef, 0x59, 0xe6, 0x8a, 0x19, 0x15,
+	0x6e, 0xc8, 0x98, 0x97, 0xb8, 0xaf, 0xdb, 0xdf, 0xff, 0x30, 0xa5, 0x9c, 0xcd, 0xdd, 0x1e, 0x4d,
+	0x2e, 0x42, 0xdf, 0x42, 0xb6, 0xe6, 0xe8, 0xe4, 0x8b, 0x7b, 0x96, 0x5d, 0xcf, 0xa8, 0x18, 0x4b,
+	0xd0, 0x0a, 0x93, 0x43, 0xf0, 0xc1, 0x66, 0xf5, 0x7a, 0x07, 0xfd, 0xb8, 0x2c, 0x18, 0x7f, 0x03,
+	0xa6, 0xcb, 0xb3, 0x7c, 0x34, 0xae, 0xda, 0xb5, 0xb6, 0xfa, 0x3f, 0x74, 0x52, 0x1f, 0x65, 0x6a,
+	0x3c, 0x72, 0x34, 0xed, 0xa6, 0x0d, 0xc5, 0x73, 0xca, 0x19, 0xae, 0x43, 0xe5, 0x6c, 0x32, 0xb9,
+	0xee, 0x9e, 0x5e, 0x5e, 0x9a, 0x08, 0x03, 0x94, 0xae, 0x07, 0xe3, 0xf1, 0xc5, 0x95, 0xa9, 0x1d,
+	0x57, 0x2a, 0x9e, 0xf9, 0xf0, 0xf0, 0xf0, 0xa0, 0x35, 0xbf, 0x85, 0xea, 0x44, 0xcc, 0x58, 0xdc,
+	0xa5, 0x09, 0xc3, 0x18, 0x8a, 0x92, 0x56, 0x8d, 0xa2, 0x4a, 0xd4, 0xfb, 0x06, 0xf4, 0x6f, 0x04,
+	0xbb, 0xaa, 0x4b, 0x83, 0xdf, 0x05, 0x0b, 0x93, 0x20, 0x0a, 0x93, 0x76, 0x13, 0x8a, 0x22, 0xe0,
+	0x0c, 0x3f, 0x1b, 0x91, 0xc5, 0x6c, 0xe4, 0x20, 0xa2, 0x62, 0xed, 0x77, 0x50, 0x9a, 0xd2, 0x38,
+	0x8e, 0xc4, 0x16, 0x2a, 0x50, 0xe3, 0xb5, 0x9e, 0x7a, 0xd7, 0xec, 0x64, 0x99, 0xd7, 0xee, 0x82,
+	0xe1, 0x45, 0x61, 0x2a, 0x30, 0x5e, 0x41, 0x57, 0x87, 0x56, 0x9f, 0xfa, 0x14, 0x49, 0x9e, 0xda,
+	0x74, 0x60, 0x4f, 0xe5, 0x3c, 0x0b, 0x6f, 0x2f, 0x6f, 0xd3, 0x82, 0xca, 0x64, 0xee, 0x29, 0x9c,
+	0xaa, 0xfe, 0xf1, 0xf1, 0xf1, 0xb1, 0xdc, 0xd1, 0x2a, 0xa8, 0xf9, 0x87, 0x0e, 0xd0, 0x8b, 0x38,
+	0x4f, 0xc3, 0xe0, 0x63, 0xca, 0xf0, 0x4b, 0xa8, 0x71, 0x7a, 0xcf, 0x5c, 0xce, 0xdc, 0x69, 0x9c,
+	0x53, 0x54, 0x48, 0x55, 0xba, 0x46, 0xac, 0x17, 0x67, 0xd8, 0x82, 0x52, 0x98, 0xf2, 0x5b, 0x16,
+	0x5b, 0x86, 0x64, 0x1f, 0x16, 0xc8, 0xd2, 0xc6, 0x7b, 0xcb, 0x46, 0x97, 0x64, 0xa3, 0x87, 0x85,
+	0xbc, 0xd5, 0xd2, 0xeb, 0x51, 0x41, 0x95, 0x30, 0xd5, 0xa5, 0x57, 0x5a, 0xf8, 0x00, 0x4a, 0x82,
+	0xf1, 0x85, 0x3b, 0x55, 0x72, 0x84, 0x86, 0x05, 0x62, 0x48, 0xbb, 0x27, 0xe9, 0x67, 0x2c, 0xf0,
+	0x67, 0x42, 0xfd, 0xa6, 0x9a, 0xa4, 0xcf, 0x6d, 0x7c, 0x04, 0x86, 0x88, 0x3c, 0x9a, 0x59, 0xa0,
+	0x34, 0xf1, 0xb3, 0x55, 0x6f, 0xfa, 0x34, 0x4b, 0x14, 0x81, 0x8c, 0xe2, 0x7d, 0x30, 0x38, 0xcd,
+	0x6e, 0x99, 0x55, 0x93, 0x27, 0x97, 0x7e, 0x65, 0x4a, 0xbf, 0xc7, 0xe6, 0x82, 0x2a, 0x01, 0xf9,
+	0x5c, 0xfa, 0x95, 0x89, 0x9b, 0xa0, 0xf3, 0xc4, 0x57, 0xf2, 0xb1, 0xf5, 0x53, 0x0e, 0x0b, 0x44,
+	0x06, 0xf1, 0xcf, 0x9b, 0xfa, 0xb9, 0xa3, 0xf4, 0xf3, 0xc5, 0x0a, 0xb9, 0xee, 0xdd, 0x5a, 0x42,
+	0x87, 0x85, 0x0d, 0x11, 0x6d, 0x7c, 0xb5, 0x29, 0x46, 0xfb, 0x50, 0xe2, 0x4c, 0xf5, 0x6f, 0x37,
+	0x57, 0xac, 0xdc, 0x6a, 0x94, 0xc1, 0xe8, 0xcb, 0x03, 0x75, 0xcb, 0x60, 0xa4, 0x61, 0x10, 0x85,
+	0xc7, 0x2f, 0xa1, 0xbc, 0x94, 0x7b, 0xb9, 0xe6, 0xb9, 0xe0, 0x9b, 0x48, 0x8a, 0xc2, 0xd9, 0xe0,
+	0x83, 0xa9, 0x1d, 0xb7, 0xa0, 0x28, 0x4b, 0x97, 0xc1, 0xd1, 0x64, 0xdc, 0x3f, 0xfd, 0xc5, 0x44,
+	0xb8, 0x06, 0xe5, 0xeb, 0x9b, 0xc1, 0x95, 0x34, 0x34, 0xa9, 0x1a, 0x97, 0x37, 0xe3, 0xfe, 0x85,
+	0x89, 0x1a, 0x9a, 0x89, 0x3a, 0x36, 0xe8, 0x82, 0xfa, 0x5b, 0xfb, 0xea, 0xab, 0x63, 0xc8, 0x50,
+	0xa7, 0xf7, 0xdf, 0x4a, 0x3e, 0xc7, 0xfc, 0xaa, 0xba, 0xf3, 0xe2, 0xe9, 0xa2, 0xfe, 0xff, 0x4e,
+	0x76, 0xdf, 0x7d, 0x78, 0xeb, 0x07, 0x62, 0x96, 0xde, 0xb6, 0xa6, 0x11, 0x3f, 0xf1, 0xa3, 0x39,
+	0x0d, 0xfd, 0x13, 0x75, 0x39, 0xde, 0xa6, 0x77, 0xf9, 0xcb, 0xf4, 0x95, 0xcf, 0xc2, 0x57, 0x7e,
+	0xa4, 0x6e, 0x55, 0xb9, 0x0f, 0x27, 0xcb, 0x6b, 0xf6, 0x27, 0xf9, 0xf8, 0x37, 0x00, 0x00, 0xff,
+	0xff, 0x12, 0xd5, 0x46, 0x00, 0x75, 0x07, 0x00, 0x00,
 }
diff --git a/protoc-gen-go/testdata/my_test/test.proto b/protoc-gen-go/testdata/my_test/test.proto
index 4f133dc..1ef3fd0 100644
--- a/protoc-gen-go/testdata/my_test/test.proto
+++ b/protoc-gen-go/testdata/my_test/test.proto
@@ -147,7 +147,7 @@
     Days today = 10;
     bool maybe = 11;
     sint32 delta = 12;  // name will conflict with Delta below
-    Reply msg = 13;
+    Reply msg = 16;  // requires two bytes to encode field tag
     group SomeGroup = 14 {
       optional string member = 15;
     }
diff --git a/ptypes/struct/struct.pb.go b/ptypes/struct/struct.pb.go
index 8201c4a..442c0e0 100644
--- a/ptypes/struct/struct.pb.go
+++ b/ptypes/struct/struct.pb.go
@@ -324,26 +324,26 @@
 	// kind
 	switch x := m.Kind.(type) {
 	case *Value_NullValue:
-		n += proto.SizeVarint(1<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(x.NullValue))
 	case *Value_NumberValue:
-		n += proto.SizeVarint(2<<3 | proto.WireFixed64)
+		n += 1 // tag and wire
 		n += 8
 	case *Value_StringValue:
-		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.StringValue)))
 		n += len(x.StringValue)
 	case *Value_BoolValue:
-		n += proto.SizeVarint(4<<3 | proto.WireVarint)
+		n += 1 // tag and wire
 		n += 1
 	case *Value_StructValue:
 		s := proto.Size(x.StructValue)
-		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case *Value_ListValue:
 		s := proto.Size(x.ListValue)
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(s))
 		n += s
 	case nil: